diff options
Diffstat (limited to 'libglusterfs/src')
| -rw-r--r-- | libglusterfs/src/logging.c | 26 | 
1 files changed, 24 insertions, 2 deletions
diff --git a/libglusterfs/src/logging.c b/libglusterfs/src/logging.c index c7afbdd661c..e18971c26bf 100644 --- a/libglusterfs/src/logging.c +++ b/libglusterfs/src/logging.c @@ -737,7 +737,29 @@ gf_log_init (void *data, const char *file, const char *ident)          }          if (strcmp (file, "-") == 0) { -                file = "/dev/stderr"; +		int dupfd = -1; + +		ctx->log.filename = gf_strdup ("/dev/stderr"); +		if (!ctx->log.filename) { +			fprintf (stderr, "ERROR: strdup failed\n"); +			return -1; +		} + +		dupfd = dup (fileno (stderr)); +		if (dupfd == -1) { +			fprintf (stderr, "ERROR: could not dup %d (%s)\n", +				 fileno (stderr), strerror (errno)); +			return -1; +		} + +		ctx->log.logfile = fdopen (dupfd, "a"); +		if (!ctx->log.logfile) { +			fprintf (stderr, "ERROR: could not fdopen on %d (%s)\n", +				 dupfd, strerror (errno)); +			return -1; +		} + +		goto out;          }          ctx->log.filename = gf_strdup (file); @@ -761,7 +783,7 @@ gf_log_init (void *data, const char *file, const char *ident)                           file, strerror (errno));                  return -1;          } - +out:          ctx->log.gf_log_logfile = ctx->log.logfile;          return 0;  | 
