diff options
author | Ori Bernstein <ori@eigenstate.org> | 2023-10-14 21:32:02 +0000 |
---|---|---|
committer | Ori Bernstein <ori@eigenstate.org> | 2023-10-14 21:32:02 +0000 |
commit | 9b144a94e2e8cebf8082c8418ca3a7338c0677c1 (patch) | |
tree | 0c6037f48df3f3d4ac3eb1e8a20ac675fae2d7d1 | |
parent | eacf9fbbee70d9effcc5b049f3c9e437979f50d5 (diff) |
git/query: allow arbitrary length queries
-rw-r--r-- | sys/src/cmd/git/query.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/sys/src/cmd/git/query.c b/sys/src/cmd/git/query.c index 144ff39d0..d0288313d 100644 --- a/sys/src/cmd/git/query.c +++ b/sys/src/cmd/git/query.c @@ -152,8 +152,8 @@ usage(void) void main(int argc, char **argv) { - char query[2048], repo[512]; - char *p, *e, *s, *objpfx; + char *query, repo[512]; + char *p, *e, *objpfx; int i, j, n, nrel; Hash *h; @@ -176,15 +176,16 @@ main(int argc, char **argv) sysfatal("chdir: %r"); if((objpfx = smprint("%s/.git/fs/object/", repo)) == nil) sysfatal("smprint: %r"); - s = ""; + for(i = 0, n = 0; i < argc; i++) + n += strlen(argv[i]) + 1; + query = emalloc(n+1); p = query; - e = query + nelem(query); - for(i = 0; i < argc; i++){ - if((p = seprint(p, e, "%s%s", s, argv[i])) == nil) - sysfatal("query too long"); - s = " "; - } - if((n = resolverefs(&h, query)) == -1) + e = query + n; + for(i = 0; i < argc; i++) + p = seprint(p, e, "%s ", argv[i]); + n = resolverefs(&h, query); + free(query); + if(n == -1) sysfatal("resolve: %r"); if(changes){ for(i = 1; i < n; i++) |