From 87b86add6c08b37468beaba97237ee8d7c42a4a0 Mon Sep 17 00:00:00 2001 From: Serge Hallyn Date: Wed, 22 Jan 2014 13:53:04 -0600 Subject: [PATCH] cgmanager: cgm_set: return the length we found MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Serge Hallyn Acked-by: Stéphane Graber --- src/lxc/cgmanager.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/lxc/cgmanager.c b/src/lxc/cgmanager.c index 033dc01b5..2fa49a77b 100644 --- a/src/lxc/cgmanager.c +++ b/src/lxc/cgmanager.c @@ -248,6 +248,7 @@ static char *cgm_get_cgroup(struct lxc_handler *handler, const char *subsystem) int cgm_get(const char *filename, char *value, size_t len, const char *name, const char *lxcpath) { char *result, *controller, *key, *cgroup; + size_t newlen; controller = alloca(strlen(filename)+1); strcpy(controller, filename); @@ -267,11 +268,18 @@ int cgm_get(const char *filename, char *value, size_t len, const char *name, con return -1; } free(cgroup); + newlen = strlen(result); strncpy(value, result, len); - if (strlen(result) >= len) + if (newlen >= len) { value[len-1] = '\0'; + newlen = len-1; + } else if (newlen+1 < len) { + // cgmanager doesn't add eol to last entry + value[newlen++] = '\n'; + value[newlen] = '\0'; + } nih_free(result); - return len; + return newlen; } static int cgm_do_set(const char *controller, const char *file,