From 96ee38b048031ceefcd8eb169fc1c4bd2bee2eb7 Mon Sep 17 00:00:00 2001 From: Dhaval Giani Date: Tue, 9 Dec 2008 11:18:39 +0000 Subject: libcgroup: Better error reporting for libcgroup From: Ankita Garg This patch adds human readable error messages to the configuration parser. The error lookup is implemented as a simple table, indexed by the error. TODO: Save errno at ECGOTHER and pass it down as cgroup_lasterror. Signed-off-by: Balbir Singh Signed-off-by: Ankita Garg Signed-off-by: Dhaval Giani git-svn-id: https://libcg.svn.sourceforge.net/svnroot/libcg/trunk@228 4f4bb910-9a46-0410-90c8-c897d4f1cd53 --- api.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'api.c') diff --git a/api.c b/api.c index 4efb390..b5bb8ee 100644 --- a/api.c +++ b/api.c @@ -40,6 +40,7 @@ #include #include #include +#include #ifndef PACKAGE_VERSION #define PACKAGE_VERSION 0.01 @@ -70,6 +71,31 @@ static struct cgroup_rule_list trl; /* Lock for the list of rules (rl) */ static pthread_rwlock_t rl_lock = PTHREAD_RWLOCK_INITIALIZER; +char *cgroup_strerror_codes[] = { + "Cgroup is not compiled in", + "Cgroup is not mounted", + "Cgroup does not exist", + "Cgroup has not been created", + "Cgroup one of the needed subsystems is not mounted", + "Cgroup, request came in from non owner", + "Cgroup controllers controllers are bound to different mount points", + "Cgroup, operation not allowed", + "Cgroup value set exceeds maximum", + "Cgroup controller already exists", + "Cgroup value already exists", + "Cgroup invalid operation", + "Cgroup, creation of controller failed", + "Cgroup operation failed", + "Cgroup not initialized", + "Cgroup trying to set value for control that does not exist", + "Cgroup generic error, see errno", + "Cgroup values are not equal", + "Cgroup controllers are different", + "Cgroup parsing failed", + "Cgroup, rules file does not exist", + "Cgroup mounting failed", +}; + static int cg_chown_file(FTS *fts, FTSENT *ent, uid_t owner, gid_t group) { int ret = 0; @@ -2077,3 +2103,9 @@ cleanup_path: free(path); return ret; } + +char *cgroup_strerror(int code) +{ + assert((code >= ECGROUPNOTCOMPILED) && (code < ECGSENTINEL)); + return cgroup_strerror_codes[code % ECGROUPNOTCOMPILED]; +} -- cgit