remote-curl: make hash size independent
[gitweb.git] / strbuf.c
index 64041c3c249b158478ecc6db7257519bc3fc5c19..78eecd29f7e64109203af17cd6e7c2f7e95e3dfc 100644 (file)
--- a/strbuf.c
+++ b/strbuf.c
@@ -120,6 +120,15 @@ void strbuf_trim_trailing_dir_sep(struct strbuf *sb)
        sb->buf[sb->len] = '\0';
 }
 
+void strbuf_trim_trailing_newline(struct strbuf *sb)
+{
+       if (sb->len > 0 && sb->buf[sb->len - 1] == '\n') {
+               if (--sb->len > 0 && sb->buf[sb->len - 1] == '\r')
+                       --sb->len;
+               sb->buf[sb->len] = '\0';
+       }
+}
+
 void strbuf_ltrim(struct strbuf *sb)
 {
        char *b = sb->buf;
@@ -371,6 +380,27 @@ void strbuf_expand(struct strbuf *sb, const char *format, expand_fn_t fn,
        }
 }
 
+size_t strbuf_expand_literal_cb(struct strbuf *sb,
+                               const char *placeholder,
+                               void *context)
+{
+       int ch;
+
+       switch (placeholder[0]) {
+       case 'n':               /* newline */
+               strbuf_addch(sb, '\n');
+               return 1;
+       case 'x':
+               /* %x00 == NUL, %x0a == LF, etc. */
+               ch = hex2chr(placeholder + 1);
+               if (ch < 0)
+                       return 0;
+               strbuf_addch(sb, ch);
+               return 3;
+       }
+       return 0;
+}
+
 size_t strbuf_expand_dict_cb(struct strbuf *sb, const char *placeholder,
                void *context)
 {