+static int
+redirect_stderr (const char * stderr_file)
+{
+ if (strcmp (stderr_file, "-") == 0) {
+ if (dup2 (STDOUT_FILENO, STDERR_FILENO) < 0) {
+ perror ("dup2");
+ return 1;
+ }
+ } else {
+ int fd = open (stderr_file, O_WRONLY|O_CREAT|O_TRUNC, 0666);
+ if (fd < 0) {
+ fprintf (stderr, "Error: Cannot redirect stderr to '%s': %s\n",
+ stderr_file, strerror (errno));
+ return 1;
+ }
+ if (fd != STDERR_FILENO) {
+ if (dup2 (fd, STDERR_FILENO) < 0) {
+ perror ("dup2");
+ return 1;
+ }
+ close (fd);
+ }
+ }
+ return 0;
+}
+