From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chunyan Liu Subject: [PATCH v3] xenstore-chmod: handle arbitrary number of perms rather than MAX_PERMS constant Date: Mon, 26 Nov 2012 11:37:19 +0800 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xensource.com Cc: ian.campbell@citrix.com List-Id: xen-devel@lists.xenproject.org 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 Acked-by: Ian Campbell --- Change to V2: Cleanup hard tabs in lines touched in the patch. Resend patch by hg patchbomb to avoid whitespace damage. diff -r 8b93ac0c93f3 -r d0f86e88e3c1 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 Mon Nov 26 11:33:39 2012 +0800 @@ -25,7 +25,6 @@ #define PATH_SEP '/' #define MAX_PATH_LEN 256 -#define MAX_PERMS 16 enum mode { MODE_unknown, @@ -407,44 +406,41 @@ perform(enum mode mode, int optind, int output("%s\n", list[i]); } free(list); - optind++; - break; - } - case MODE_ls: { - do_ls(xsh, argv[optind], 0, prefix); - optind++; - break; + optind++; + break; + } + case MODE_ls: { + do_ls(xsh, argv[optind], 0, prefix); + optind++; + break; } case MODE_chmod: { - struct xs_permissions perms[MAX_PERMS]; - int nperms = 0; /* save path pointer: */ char *path = argv[optind++]; - for (; argv[optind]; optind++, nperms++) + int nperms = argc - optind; + struct xs_permissions perms[nperms]; + int i; + 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'", - argv[optind][0]); + argv[optind][0]); } }