]> git.sesse.net Git - ffmpeg/blobdiff - libavutil/avstring.c
Merge remote-tracking branch 'qatar/master'
[ffmpeg] / libavutil / avstring.c
index b573dd676157be484f14797c86794b217f2b7d89..247cd71745d63b07ec8561213bd7d103e18232ff 100644 (file)
@@ -51,11 +51,11 @@ int av_stristart(const char *str, const char *pfx, const char **ptr)
 char *av_stristr(const char *s1, const char *s2)
 {
     if (!*s2)
-        return s1;
+        return (char*)(intptr_t)s1;
 
     do {
         if (av_stristart(s1, s2, NULL))
-            return s1;
+            return (char*)(intptr_t)s1;
     } while (*s1++);
 
     return NULL;
@@ -91,6 +91,32 @@ size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...)
     return len;
 }
 
+char *av_asprintf(const char *fmt, ...)
+{
+    char *p = NULL;
+    va_list va;
+    int len;
+
+    va_start(va, fmt);
+    len = vsnprintf(NULL, 0, fmt, va);
+    va_end(va);
+    if (len < 0)
+        goto end;
+
+    p = av_malloc(len + 1);
+    if (!p)
+        goto end;
+
+    va_start(va, fmt);
+    len = vsnprintf(p, len + 1, fmt, va);
+    va_end(va);
+    if (len < 0)
+        av_freep(&p);
+
+end:
+    return p;
+}
+
 char *av_d2str(double d)
 {
     char *str= av_malloc(16);
@@ -134,6 +160,35 @@ char *av_get_token(const char **buf, const char *term)
     return ret;
 }
 
+char *av_strtok(char *s, const char *delim, char **saveptr)
+{
+    char *tok;
+
+    if (!s && !(s = *saveptr))
+        return NULL;
+
+    /* skip leading delimiters */
+    s += strspn(s, delim);
+
+    /* s now points to the first non delimiter char, or to the end of the string */
+    if (!*s) {
+        *saveptr = NULL;
+        return NULL;
+    }
+    tok = s++;
+
+    /* skip non delimiters */
+    s += strcspn(s, delim);
+    if (*s) {
+        *s = 0;
+        *saveptr = s+1;
+    } else {
+        *saveptr = NULL;
+    }
+
+    return tok;
+}
+
 #ifdef TEST
 
 #undef printf