On Mon, Dec 01, 2008 at 08:00:38PM +0530, Balbir Singh wrote:
> * 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",
> +};
> +
It might also be a good idea to add the error code as a comment to the
right so that we know what is what. Not needed for this iteration, but
would be a good thing to have.
> 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));
This means everytime we add a new error code we break ABI? (Sorry if the
question is too dumb)
> + 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
--
regards,
Dhaval
-------------------------------------------------------------------------
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