]> granicus.if.org Git - handbrake/commitdiff
ssautil: fix strndup on mingw
authorJohn Stebbins <jstebbins.hb@gmail.com>
Mon, 7 Jan 2019 19:34:29 +0000 (12:34 -0700)
committerJohn Stebbins <jstebbins.hb@gmail.com>
Mon, 14 Jan 2019 21:36:08 +0000 (13:36 -0800)
libhb/ports.c
libhb/ports.h
libhb/ssautil.c

index da48d5d81c219f7ebbe81835f097e6d56396c0c9..6773f29051e3878718d5bcee383aa2f612a39f3d 100644 (file)
@@ -1475,3 +1475,33 @@ size_t hb_getline(char ** lineptr, size_t * n, FILE * fp)
     return getline(lineptr, n, fp);
 #endif
 }
+
+char * hb_strndup(const char * src, size_t len)
+{
+#ifdef SYS_MINGW
+    char * result, * end;
+
+    if (src == NULL)
+    {
+        return NULL;
+    }
+
+    end = memchr(src, 0, len);
+    if (end != NULL)
+    {
+        len = end - src;
+    }
+
+    result = malloc(len + 1);
+    if (result == NULL)
+    {
+        return NULL;
+    }
+    memcpy(result, src, len);
+    result[len] = 0;
+
+    return result;
+#else
+    return strndup(src, len);
+#endif
+}
index f6c89b37d38693ffdafe74ba8d138bef764cb865..6a6c3c7552afcf352194cf92a4a0b98d12c144d4 100644 (file)
@@ -83,6 +83,11 @@ int hb_stat(const char *path, hb_stat_t *sb);
 FILE * hb_fopen(const char *path, const char *mode);
 char * hb_strr_dir_sep(const char *path);
 
+/************************************************************************
+ * String utils
+ ***********************************************************************/
+char * hb_strndup(const char * src, size_t len);
+
 /************************************************************************
  * File utils
  ***********************************************************************/
index 96ab11bb2934308ef4bfcd881d06963bc6b7e478..108b46f89298c96429a4db0e4b397db3af220980 100644 (file)
@@ -147,7 +147,7 @@ static int ssa_update_style(const char *ssa, hb_subtitle_style_context_t *ctx)
         if (ssa[pos] == 'r')
         {
             // Style reset
-            char * style = strndup(ssa + pos + 1, end - (pos + 1));
+            char * style = hb_strndup(ssa + pos + 1, end - (pos + 1));
             ssa_style_set(ctx, style);
             free(style);
         }
@@ -284,7 +284,7 @@ static char * get_field(char ** pos)
     char * end = strchr(start, ',');
     if (end != NULL)
     {
-        result = strndup(start, end - start);
+        result = hb_strndup(start, end - start);
         *pos = end + 1;
     }
     else
@@ -315,7 +315,7 @@ static char * sgetline(char * str)
     }
     if (eol != NULL)
     {
-        return strndup(str, eol - str);
+        return hb_strndup(str, eol - str);
     }
     else
     {