]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
Issue #1454 - Remove usage of non re-entrant strtok()
authorAdam Sutton <dev@adamsutton.me.uk>
Thu, 13 Dec 2012 20:57:09 +0000 (20:57 +0000)
committerAdam Sutton <dev@adamsutton.me.uk>
Thu, 13 Dec 2012 20:57:09 +0000 (20:57 +0000)
Thanks to Jaroslav Kysela <perex@perex.cz> for providing the initial fix.

src/epggrab/module/xmltv.c
src/filebundle.c
src/spawn.c
src/webui/extjs.c

index 9ac90bb3b56b85fb597319ba83b42ee403489663..c6f1006ef1b11a5c4a8cfc866b5ba533adea39c5 100644 (file)
@@ -634,7 +634,7 @@ static void _xmltv_load_grabbers ( void )
   size_t i, p, n;
   char *outbuf;
   char name[1000];
-  char *tmp, *path;
+  char *tmp, *tmp2, *path;
 
   /* Load data */
   outlen = spawn_and_store_stdout(XMLTV_FIND, NULL, &outbuf);
@@ -668,7 +668,7 @@ static void _xmltv_load_grabbers ( void )
       NULL
     };
     path = strdup(tmp);
-    tmp  = strtok(path, ":");
+    tmp  = strtok_r(path, ":", &tmp2);
     while (tmp) {
       DIR *dir;
       struct dirent *de;
@@ -691,7 +691,7 @@ static void _xmltv_load_grabbers ( void )
         }
         closedir(dir);
       }
-      tmp = strtok(NULL, ":");
+      tmp = strtok_r(NULL, ":", &tmp2);
     }
     free(path);
   }
index 82450a377f5644d4993c35cbbc4c76d8e0e34774..15a4d4c5f32da2b03e6485c8c1d364c26a868b3a 100644 (file)
@@ -214,12 +214,13 @@ fb_dir *fb_opendir ( const char *path )
 
     /* Bundle */
 #if ENABLE_BUNDLE
-    char *tmp1 = strdup(path);
-    char *tmp2 = strtok(tmp1, "/");
+    char *tmp1, *tmp2, *tmp3;
+    *tmp1 = strdup(path);
+    *tmp2 = strtok_r(tmp1, "/", &tmp3);
     filebundle_entry_t *fb = filebundle_root;
     while (fb && tmp2) {
       if (fb->type == FB_DIR && !strcmp(fb->name, tmp2)) {
-        tmp2 = strtok(NULL, "/");
+        tmp2 = strtok_r(NULL, "/", &tmp3);
         if (tmp2) fb = fb->d.child;
       } else {
         fb = fb->next;
index 1ae7489159128c09ae264d4d85aed7ef2ae4d4b7..0cee4bdd5b15e78b0f221ae829e84c34fa29f51b 100644 (file)
@@ -53,13 +53,13 @@ find_exec ( const char *name, char *out, size_t len )
 {
   int ret = 0;
   char bin[512];
-  char *path, *tmp;
+  char *path, *tmp, *tmp2;
   DIR *dir;
   struct dirent *de;
   struct stat st;
   if (!(path = getenv("PATH"))) return 0;
   path = strdup(path);
-  tmp  = strtok(path, ":");
+  tmp  = strtok_r(path, ":", &tmp2);
   while (tmp && !ret) {
     if ((dir = opendir(tmp))) {
       while ((de = readdir(dir))) {
@@ -73,7 +73,7 @@ find_exec ( const char *name, char *out, size_t len )
       }
       closedir(dir);
     }
-    tmp = strtok(NULL, ":");
+    tmp = strtok_r(NULL, ":", &tmp2);
   }
   free(path);
   return ret;
index fd12e1884f5e4375d6f8529cc8781e908eb31afe..e27935afc9019f8672c27d438aa5e61229fed2ac 100644 (file)
@@ -352,7 +352,7 @@ extjs_channels_update(htsmsg_t *in)
 
     if((s = htsmsg_get_str(c, "epggrabsrc")) != NULL) {
       char *tmp = strdup(s);
-      char *sptr = NULL;
+      char *sptr, *sptr2;
       char *modecid  = strtok_r(tmp, ",", &sptr);
       char *modid, *ecid;
       epggrab_module_t *mod;
@@ -377,8 +377,8 @@ extjs_channels_update(htsmsg_t *in)
 
       /* Add new */
       while (modecid) {
-        modid    = strtok(modecid, "|");
-        ecid     = strtok(NULL, "|");
+        modid    = strtok_r(modecid, "|", &sptr2);
+        ecid     = strtok_r(NULL, "|", &sptr2);
         modecid  = strtok_r(NULL, ",", &sptr);
 
         if (!(mod = epggrab_module_find_by_id(modid)))