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

Reply via email to