|
[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 |