[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH]xenstore-chmod: handle arbitrary number of perms rather than MAX_PERMS constant
On Fri, 2012-11-16 at 06:02 +0000, Chunyan Liu wrote: > Constant MAX_PERMS 16 is too small to use in some occasions, e.g. if > there are more than 16 domU(s) on one hypervisor (it's easy to > achieve) and one wants to do xenstore-chmod PATH to all domU(s). So, > remove MAX_PERMS limitation and make it as arbitrary number of perms. > > Signed-off-by: Chunyan Liu <cyliu@xxxxxxxx> > > diff -r 8b93ac0c93f3 tools/xenstore/xenstore_client.c > --- a/tools/xenstore/xenstore_client.c Tue Nov 13 11:19:17 2012 +0000 > +++ b/tools/xenstore/xenstore_client.c Thu Nov 15 16:33:32 2012 +0800 > @@ -25,7 +25,6 @@ > #define PATH_SEP '/' > #define MAX_PATH_LEN 256 > > -#define MAX_PERMS 16 > > enum mode { > MODE_unknown, > @@ -416,31 +415,31 @@ perform(enum mode mode, int optind, int > break; > } > case MODE_chmod: { > - struct xs_permissions perms[MAX_PERMS]; > - int nperms = 0; > + struct xs_permissions *perms; > /* save path pointer: */ > char *path = argv[optind++]; > + int nperms = argc - optind; > + int i; > + perms = (struct xs_permissions *)malloc(nperms * > sizeof(struct xs_permissions)); You could just do: struct xs_permissions perms[nperms]; and let the compiler allocate enough space on the stack. > + if (!perms) > + err(1, NULL); > - for (; argv[optind]; optind++, nperms++) > + for (i = 0; argv[optind]; optind++, i++) > { > - if (MAX_PERMS <= nperms) > - errx(1, "Too many permissions specified. " > - "Maximum per invocation is %d.", MAX_PERMS); > - > - perms[nperms].id = atoi(argv[optind]+1); > + perms[i].id = atoi(argv[optind]+1); > > switch (argv[optind][0]) > { > case 'n': > - perms[nperms].perms = XS_PERM_NONE; > + perms[i].perms = XS_PERM_NONE; > break; > case 'r': > - perms[nperms].perms = XS_PERM_READ; > + perms[i].perms = XS_PERM_READ; > break; > case 'w': > - perms[nperms].perms = XS_PERM_WRITE; > + perms[i].perms = XS_PERM_WRITE; > break; > case 'b': > - perms[nperms].perms = XS_PERM_READ | XS_PERM_WRITE; > + perms[i].perms = XS_PERM_READ | XS_PERM_WRITE; > break; > default: > errx(1, "Invalid permission specification: '%c'", > @@ -449,6 +448,7 @@ perform(enum mode mode, int optind, int > } > > do_chmod(path, perms, nperms, upto, recurse, xsh, xth); > + free(perms); > break; > } > case MODE_watch: { > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |