X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=strbuf.c;h=1df674e9194ee6d5cd5386f477745ff6639b7b65;hb=f5833f0110119fc17973835cc0042e76e3375ccd;hp=323c49ceb35cb053434248df869578e649ccadc0;hpb=b005d550f87fdb56406120a35fa218d869cdde3a;p=platform%2Fupstream%2Fgit.git diff --git a/strbuf.c b/strbuf.c index 323c49c..1df674e 100644 --- a/strbuf.c +++ b/strbuf.c @@ -11,6 +11,28 @@ int starts_with(const char *str, const char *prefix) return 0; } +int skip_to_optional_arg_default(const char *str, const char *prefix, + const char **arg, const char *def) +{ + const char *p; + + if (!skip_prefix(str, prefix, &p)) + return 0; + + if (!*p) { + if (arg) + *arg = def; + return 1; + } + + if (*p != '=') + return 0; + + if (arg) + *arg = p + 1; + return 1; +} + /* * Used as the default ->buf value, so that people can always assume * buf is non NULL and ->buf is NUL terminated even for a freshly @@ -386,12 +408,15 @@ ssize_t strbuf_read(struct strbuf *sb, int fd, size_t hint) ssize_t strbuf_read_once(struct strbuf *sb, int fd, size_t hint) { + size_t oldalloc = sb->alloc; ssize_t cnt; strbuf_grow(sb, hint ? hint : 8192); cnt = xread(fd, sb->buf + sb->len, sb->alloc - sb->len - 1); if (cnt > 0) strbuf_setlen(sb, sb->len + cnt); + else if (oldalloc == 0) + strbuf_release(sb); return cnt; } @@ -658,7 +683,7 @@ static void strbuf_add_urlencode(struct strbuf *sb, const char *s, size_t len, (!reserved && is_rfc3986_reserved(ch))) strbuf_addch(sb, ch); else - strbuf_addf(sb, "%%%02x", ch); + strbuf_addf(sb, "%%%02x", (unsigned char)ch); } }