author | Lars Hjemli <hjemli@gmail.com> | 2006-12-28 01:51:46 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2006-12-28 01:51:46 (UTC) |
commit | 05b13194b4b40a2614692125d5037ef20c5fb20e (patch) (side-by-side diff) | |
tree | 5f22ac2e53d5ea3cb8fc50e2ca59c524a7180574 | |
parent | 732d68d240b95dc428c92fc94bce9adb8912094e (diff) | |
download | cgit-05b13194b4b40a2614692125d5037ef20c5fb20e.zip cgit-05b13194b4b40a2614692125d5037ef20c5fb20e.tar.gz cgit-05b13194b4b40a2614692125d5037ef20c5fb20e.tar.bz2 |
Handle '+' in querystring
Translate '+' to ' ' in querystring parser (still doesn't handle %xx)
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | parsing.c | 2 |
1 files changed, 2 insertions, 0 deletions
@@ -47,96 +47,98 @@ int read_config_line(FILE *f, char *line, const char **value, int bufsize) line[i] = 0; *value = &line[i+1]; } else if (c=='\n' && !isname) { i = 0; continue; } else if (c=='\n' || c==EOF) { line[i] = 0; break; } else { line[i]=c; } isname = 1; i++; } line[i+1] = 0; return i; } int cgit_read_config(const char *filename, configfn fn) { int ret = 0, len; char line[256]; const char *value; FILE *f = fopen(filename, "r"); if (!f) return -1; while((len = read_config_line(f, line, &value, sizeof(line))) > 0) (*fn)(line, value); fclose(f); return ret; } int cgit_parse_query(char *txt, configfn fn) { char *t, *value = NULL, c; if (!txt) return 0; t = txt = xstrdup(txt); while((c=*t) != '\0') { if (c=='=') { *t = '\0'; value = t+1; + } else if (c=='+') { + *t = ' '; } else if (c=='&') { *t = '\0'; (*fn)(txt, value); txt = t+1; value = NULL; } t++; } if (t!=txt) (*fn)(txt, value); return 0; } char *substr(const char *head, const char *tail) { char *buf; buf = xmalloc(tail - head + 1); strncpy(buf, head, tail - head); buf[tail - head] = '\0'; return buf; } struct commitinfo *cgit_parse_commit(struct commit *commit) { struct commitinfo *ret; char *p = commit->buffer, *t = commit->buffer; ret = xmalloc(sizeof(*ret)); ret->commit = commit; if (strncmp(p, "tree ", 5)) die("Bad commit: %s", sha1_to_hex(commit->object.sha1)); else p += 46; // "tree " + hex[40] + "\n" while (!strncmp(p, "parent ", 7)) p += 48; // "parent " + hex[40] + "\n" if (!strncmp(p, "author ", 7)) { p += 7; t = strchr(p, '<') - 1; ret->author = substr(p, t); p = t; t = strchr(t, '>') + 1; ret->author_email = substr(p, t); ret->author_date = atol(++t); p = strchr(t, '\n') + 1; |