aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxl/libxl_utils.c
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2010-04-12 17:38:42 +0100
committerKeir Fraser <keir.fraser@citrix.com>2010-04-12 17:38:42 +0100
commit4f7fb696611fdb1dbb781b7a236f3bc6a4d5bfee (patch)
tree9bc280f875a1952be6618176a35536569617deab /tools/libxl/libxl_utils.c
parentc20f18fbe847416f89c6362aea8604b2b2e28aae (diff)
downloadxen-4f7fb696611fdb1dbb781b7a236f3bc6a4d5bfee.tar.gz
xen-4f7fb696611fdb1dbb781b7a236f3bc6a4d5bfee.tar.bz2
xen-4f7fb696611fdb1dbb781b7a236f3bc6a4d5bfee.zip
libxl: Report error if logfile rotation fails
Check the return values from renames and errors from stat in libxl_create_logfile (which, misleadingly, does not actually create the logfile). Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
Diffstat (limited to 'tools/libxl/libxl_utils.c')
-rw-r--r--tools/libxl/libxl_utils.c28
1 files changed, 25 insertions, 3 deletions
diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c
index 1ba9431459..afc852a9ac 100644
--- a/tools/libxl/libxl_utils.c
+++ b/tools/libxl/libxl_utils.c
@@ -101,11 +101,25 @@ int libxl_is_stubdom(struct libxl_ctx *ctx, uint32_t domid, uint32_t *target_dom
return 1;
}
+static int logrename(struct libxl_ctx *ctx, const char *old, const char *new) {
+ int r;
+
+ r = rename(old, new);
+ if (r) {
+ if (errno == ENOENT) return 0; /* ok */
+
+ XL_LOG_ERRNO(ctx, XL_LOG_ERROR, "failed to rotate logfile - could not"
+ " rename %s to %s", old, new);
+ return ERROR_FAIL;
+ }
+ return 0;
+}
+
int libxl_create_logfile(struct libxl_ctx *ctx, char *name, char **full_name)
{
struct stat stat_buf;
char *logfile, *logfile_new;
- int i;
+ int i, rc;
logfile = libxl_sprintf(ctx, "/var/log/xen/%s.log", name);
if (stat(logfile, &stat_buf) == 0) {
@@ -115,11 +129,19 @@ int libxl_create_logfile(struct libxl_ctx *ctx, char *name, char **full_name)
for (i = 9; i > 0; i--) {
logfile = libxl_sprintf(ctx, "/var/log/xen/%s.log.%d", name, i);
logfile_new = libxl_sprintf(ctx, "/var/log/xen/%s.log.%d", name, i + 1);
- rename(logfile, logfile_new);
+ rc = logrename(ctx, logfile, logfile_new);
+ if (rc) return rc;
}
logfile = libxl_sprintf(ctx, "/var/log/xen/%s.log", name);
logfile_new = libxl_sprintf(ctx, "/var/log/xen/%s.log.1", name);
- rename(logfile, logfile_new);
+
+ rc = logrename(ctx, logfile, logfile_new);
+ if (rc) return rc;
+ } else {
+ if (errno != ENOENT)
+ XL_LOG_ERRNO(ctx, XL_LOG_WARNING, "problem checking existence of"
+ " logfile %s, which might have needed to be rotated",
+ name);
}
*full_name = strdup(logfile);
return 0;