* Ankita Garg <[EMAIL PROTECTED]> [2008-12-01 17:25:52]:
> Hi Balbir,
>
> Sure, no problem. Sorry could not clean up the patch after the workout..
How does this look?
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 <[EMAIL PROTECTED]>
Signed-off-by: Ankita Garg <[EMAIL PROTECTED]>
Index: trunk/api.c
===================================================================
--- trunk.orig/api.c 2008-12-01 15:58:11.000000000 +0530
+++ trunk/api.c 2008-12-01 19:37:35.000000000 +0530
@@ -40,6 +40,7 @@
#include <ctype.h>
#include <pwd.h>
#include <libgen.h>
+#include <assert.h>
#ifndef PACKAGE_VERSION
#define PACKAGE_VERSION 0.01
@@ -70,6 +71,31 @@
/* 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 @@
free(path);
return ret;
}
+
+char *cgroup_strerror(int code)
+{
+ assert((code >= ECGROUPNOTCOMPILED) && (code < ECGSENTINEL));
+ return cgroup_strerror_codes[code % ECGROUPNOTCOMPILED];
+}
Index: trunk/cgconfig.c
===================================================================
--- trunk.orig/cgconfig.c 2008-12-01 19:35:42.000000000 +0530
+++ trunk/cgconfig.c 2008-12-01 19:36:43.000000000 +0530
@@ -44,8 +44,7 @@
if (ret) {
printf("Loading configuration file %s "
"failed, error: %s\n", filename,
- strerror(errno));
- printf("return code = %d\n", ret);
+ cgroup_strerror(ret));
exit(3);
}
return 0;
Index: trunk/libcgroup.h
===================================================================
--- trunk.orig/libcgroup.h 2008-12-01 15:57:31.000000000 +0530
+++ trunk/libcgroup.h 2008-12-01 19:35:28.000000000 +0530
@@ -94,6 +94,7 @@
ECGROUPPARSEFAIL, /* Failed to parse rules configuration file. */
ECGROUPNORULES, /* Rules list does not exist. */
ECGMOUNTFAIL,
+ ECGSENTINEL, /* Please insert further error codes above this */
};
#define CG_NV_MAX 100
@@ -187,6 +188,12 @@
*/
int cgroup_get_current_controller_path(pid_t pid, const char *controller,
char **current_path);
+/**
+ * Return error corresponding to @code in human readable format.
+ * @code: error code for which the corresponding error string is to be
+ * returned
+ */
+char *cgroup_strerror(int code);
/* The wrappers for filling libcg structures */
Index: trunk/libcgroup.map
===================================================================
--- trunk.orig/libcgroup.map 2008-12-01 19:40:00.000000000 +0530
+++ trunk/libcgroup.map 2008-12-01 19:53:03.000000000 +0530
@@ -40,3 +40,8 @@
local:
*;
};
+
+CGROUP_0.32.1 {
+global:
+ cgroup_strerror;
+} CGROUP_0.32;
--
Balbir
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Libcg-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libcg-devel