summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOri Bernstein <ori@eigenstate.org>2023-10-14 21:32:02 +0000
committerOri Bernstein <ori@eigenstate.org>2023-10-14 21:32:02 +0000
commit9b144a94e2e8cebf8082c8418ca3a7338c0677c1 (patch)
tree0c6037f48df3f3d4ac3eb1e8a20ac675fae2d7d1
parenteacf9fbbee70d9effcc5b049f3c9e437979f50d5 (diff)
git/query: allow arbitrary length queries
-rw-r--r--sys/src/cmd/git/query.c21
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++)