[PATCH] strtok --> strsep (again)

From: René Scharfe (l.s.r@web.de)
Date: Tue Jan 15 2002 - 16:09:01 EST


Hi,

patch below replaces most uses of strtok by strsep. It compiles,
but otherwise it's untested.

This change is suggested by the Kernel Janitor TODO List because
strtok is not threadsafe. For most of the framebuffer drivers it
was already done. For some more information see lib/string.c:14.

Linus, please apply.

René

 drivers/isdn/avmb1/capifs.c | 7 +++----
 drivers/scsi/ibmmca.c | 5 ++---
 drivers/usb/inode.c | 6 +++---
 drivers/video/atafb.c | 2 +-
 drivers/video/aty/atyfb_base.c | 2 ++
 drivers/video/aty128fb.c | 4 +++-
 drivers/video/clgenfb.c | 3 +--
 drivers/video/sis/sis_main.c | 3 +--
 fs/adfs/super.c | 4 +++-
 fs/affs/super.c | 4 +++-
 fs/autofs/inode.c | 4 +++-
 fs/autofs4/inode.c | 4 +++-
 fs/devpts/inode.c | 7 +++----
 fs/ext2/super.c | 6 +++---
 fs/ext3/super.c | 6 +++---
 fs/hfs/super.c | 5 +++--
 fs/hpfs/super.c | 4 +++-
 fs/intermezzo/super.c | 6 +++---
 fs/isofs/inode.c | 4 +++-
 fs/nfs/nfsroot.c | 6 +++---
 fs/ntfs/fs.c | 5 ++++-
 fs/proc/inode.c | 4 +++-
 fs/reiserfs/super.c | 4 +++-
 fs/udf/super.c | 4 +++-
 fs/ufs/super.c | 7 +++----
 mm/shmem.c | 7 +++----
 26 files changed, 71 insertions(+), 52 deletions(-)

diff -ur linux-2.5.2-pre11/drivers/isdn/avmb1/capifs.c linux-2.5.2.11/drivers/isdn/avmb1/capifs.c
--- linux-2.5.2-pre11/drivers/isdn/avmb1/capifs.c Sat Jan 12 17:38:01 2002
+++ linux-2.5.2.11/drivers/isdn/avmb1/capifs.c Sun Jan 13 18:19:16 2002
@@ -232,10 +232,9 @@
         unsigned int maxncci = 512;
         char *this_char, *value;
 
- this_char = NULL;
- if ( options )
- this_char = strtok(options,",");
- for ( ; this_char; this_char = strtok(NULL,",")) {
+ while ((this_char = strsep(&options,",")) != NULL) {
+ if (!*this_char)
+ continue;
                 if ((value = strchr(this_char,'=')) != NULL)
                         *value++ = 0;
                 if (!strcmp(this_char,"uid")) {
diff -ur linux-2.5.2-pre11/drivers/scsi/ibmmca.c linux-2.5.2.11/drivers/scsi/ibmmca.c
--- linux-2.5.2-pre11/drivers/scsi/ibmmca.c Wed May 2 01:05:00 2001
+++ linux-2.5.2.11/drivers/scsi/ibmmca.c Sun Jan 13 18:23:29 2002
@@ -1406,9 +1406,9 @@
    io_base = 0;
    id_base = 0;
    if (str) {
- token = strtok(str,",");
       j = 0;
- while (token) {
+ while ((token = strsep(&str,",")) != NULL) {
+ if (!*token) continue;
          if (!strcmp(token,"activity")) display_mode |= LED_ACTIVITY;
          if (!strcmp(token,"display")) display_mode |= LED_DISP;
          if (!strcmp(token,"adisplay")) display_mode |= LED_ADISP;
@@ -1424,7 +1424,6 @@
               scsi_id[id_base++] = simple_strtoul(token,NULL,0);
             j++;
          }
- token = strtok(NULL,",");
       }
    } else if (ints) {
       for (i = 0; i < IM_MAX_HOSTS && 2*i+2 < ints[0]; i++) {
diff -ur linux-2.5.2-pre11/drivers/usb/inode.c linux-2.5.2.11/drivers/usb/inode.c
--- linux-2.5.2-pre11/drivers/usb/inode.c Sat Jan 12 17:38:07 2002
+++ linux-2.5.2.11/drivers/usb/inode.c Sun Jan 13 18:31:40 2002
@@ -65,9 +65,9 @@
 {
         char *curopt = NULL, *value;
 
- if (data)
- curopt = strtok(data, ",");
- for (; curopt; curopt = strtok(NULL, ",")) {
+ while ((curopt = strsep(&data, ",")) != NULL) {
+ if (!*curopt)
+ continue;
                 if ((value = strchr(curopt, '=')) != NULL)
                         *value++ = 0;
                 if (!strcmp(curopt, "devuid")) {
diff -ur linux-2.5.2-pre11/drivers/video/atafb.c linux-2.5.2.11/drivers/video/atafb.c
--- linux-2.5.2-pre11/drivers/video/atafb.c Thu Oct 25 09:02:26 2001
+++ linux-2.5.2.11/drivers/video/atafb.c Sat Jan 12 17:55:48 2002
@@ -2899,7 +2899,7 @@
     if (!options || !*options)
                 return 0;
      
- for(this_opt=strtok(options,","); this_opt; this_opt=strtok(NULL,",")) {
+ while ((this_opt=strsep(&options, ",")) != NULL) {
         if (!*this_opt) continue;
         if ((temp=get_video_mode(this_opt)))
                 default_par=temp;
diff -ur linux-2.5.2-pre11/drivers/video/aty/atyfb_base.c linux-2.5.2.11/drivers/video/aty/atyfb_base.c
--- linux-2.5.2-pre11/drivers/video/aty/atyfb_base.c Sat Jan 12 17:38:09 2002
+++ linux-2.5.2.11/drivers/video/aty/atyfb_base.c Sat Jan 12 17:55:48 2002
@@ -2522,6 +2522,8 @@
         return 0;
 
     while ((this_opt = strsep(&options, ",")) != NULL) {
+ if (!*this_opt)
+ continue;
         if (!strncmp(this_opt, "font:", 5)) {
                 char *p;
                 int i;
diff -ur linux-2.5.2-pre11/drivers/video/aty128fb.c linux-2.5.2.11/drivers/video/aty128fb.c
--- linux-2.5.2-pre11/drivers/video/aty128fb.c Sun Nov 11 19:09:37 2001
+++ linux-2.5.2.11/drivers/video/aty128fb.c Sun Jan 13 16:38:46 2002
@@ -1620,7 +1620,9 @@
     if (!options || !*options)
         return 0;
 
- while (this_opt = strsep(&options, ",")) {
+ while ((this_opt = strsep(&options, ",")) != NULL) {
+ if (!*this_opt)
+ continue;
         if (!strncmp(this_opt, "font:", 5)) {
             char *p;
             int i;
diff -ur linux-2.5.2-pre11/drivers/video/clgenfb.c linux-2.5.2.11/drivers/video/clgenfb.c
--- linux-2.5.2-pre11/drivers/video/clgenfb.c Tue Nov 20 00:19:42 2001
+++ linux-2.5.2.11/drivers/video/clgenfb.c Sat Jan 12 17:55:48 2002
@@ -2840,8 +2840,7 @@
         if (!options || !*options)
                 return 0;
 
- for (this_opt = strtok (options, ","); this_opt != NULL;
- this_opt = strtok (NULL, ",")) {
+ while ((this_opt = strsep (&options, ",")) != NULL) {
                 if (!*this_opt) continue;
 
                 DPRINTK("clgenfb_setup: option '%s'\n", this_opt);
diff -ur linux-2.5.2-pre11/drivers/video/sis/sis_main.c linux-2.5.2.11/drivers/video/sis/sis_main.c
--- linux-2.5.2-pre11/drivers/video/sis/sis_main.c Fri Nov 9 23:11:14 2001
+++ linux-2.5.2.11/drivers/video/sis/sis_main.c Sat Jan 12 17:55:48 2002
@@ -2257,8 +2257,7 @@
         if (!options || !*options)
                 return 0;
 
- for (this_opt = strtok (options, ","); this_opt;
- this_opt = strtok (NULL, ",")) {
+ while ((this_opt = strsep (&options, ",")) != NULL) {
                 if (!*this_opt)
                         continue;
 
diff -ur linux-2.5.2-pre11/fs/adfs/super.c linux-2.5.2.11/fs/adfs/super.c
--- linux-2.5.2-pre11/fs/adfs/super.c Sat Jan 12 17:38:09 2002
+++ linux-2.5.2.11/fs/adfs/super.c Sun Jan 13 17:01:41 2002
@@ -171,7 +171,9 @@
         if (!options)
                 return 0;
 
- for (opt = strtok(options, ","); opt != NULL; opt = strtok(NULL, ",")) {
+ while ((opt = strsep(&options, ",")) != NULL) {
+ if (!*opt)
+ continue;
                 value = strchr(opt, '=');
                 if (value)
                         *value++ = '\0';
diff -ur linux-2.5.2-pre11/fs/affs/super.c linux-2.5.2.11/fs/affs/super.c
--- linux-2.5.2-pre11/fs/affs/super.c Sat Jan 12 17:38:09 2002
+++ linux-2.5.2.11/fs/affs/super.c Sun Jan 13 17:02:58 2002
@@ -109,7 +109,9 @@
         *mount_opts = 0;
         if (!options)
                 return 1;
- for (this_char = strtok(options,","); this_char; this_char = strtok(NULL,",")) {
+ while ((this_char = strsep(&options, ",")) != NULL) {
+ if (!*this_char)
+ continue;
                 f = 0;
                 if ((value = strchr(this_char,'=')) != NULL)
                         *value++ = 0;
diff -ur linux-2.5.2-pre11/fs/autofs/inode.c linux-2.5.2.11/fs/autofs/inode.c
--- linux-2.5.2-pre11/fs/autofs/inode.c Sat Jan 12 17:38:09 2002
+++ linux-2.5.2.11/fs/autofs/inode.c Sun Jan 13 17:16:37 2002
@@ -61,7 +61,9 @@
         *pipefd = -1;
 
         if ( !options ) return 1;
- for (this_char = strtok(options,","); this_char; this_char = strtok(NULL,",")) {
+ while ((this_char = strsep(&options,",")) != NULL) {
+ if (!*value)
+ continue;
                 if ((value = strchr(this_char,'=')) != NULL)
                         *value++ = 0;
                 if (!strcmp(this_char,"fd")) {
diff -ur linux-2.5.2-pre11/fs/autofs4/inode.c linux-2.5.2.11/fs/autofs4/inode.c
--- linux-2.5.2-pre11/fs/autofs4/inode.c Sat Jan 12 17:38:09 2002
+++ linux-2.5.2.11/fs/autofs4/inode.c Sun Jan 13 17:20:37 2002
@@ -112,7 +112,9 @@
         *pipefd = -1;
 
         if ( !options ) return 1;
- for (this_char = strtok(options,","); this_char; this_char = strtok(NULL,",")) {
+ while ((this_char = strsep(&options,",")) != NULL) {
+ if (!*this_char)
+ continue;
                 if ((value = strchr(this_char,'=')) != NULL)
                         *value++ = 0;
                 if (!strcmp(this_char,"fd")) {
diff -ur linux-2.5.2-pre11/fs/devpts/inode.c linux-2.5.2.11/fs/devpts/inode.c
--- linux-2.5.2-pre11/fs/devpts/inode.c Thu Oct 25 09:02:26 2001
+++ linux-2.5.2.11/fs/devpts/inode.c Sun Jan 13 17:19:28 2002
@@ -66,10 +66,9 @@
         umode_t mode = 0600;
         char *this_char, *value;
 
- this_char = NULL;
- if ( options )
- this_char = strtok(options,",");
- for ( ; this_char; this_char = strtok(NULL,",")) {
+ while ((this_char = strsep(&options,",")) != NULL) {
+ if (!*this_char)
+ continue;
                 if ((value = strchr(this_char,'=')) != NULL)
                         *value++ = 0;
                 if (!strcmp(this_char,"uid")) {
diff -ur linux-2.5.2-pre11/fs/ext2/super.c linux-2.5.2.11/fs/ext2/super.c
--- linux-2.5.2-pre11/fs/ext2/super.c Sat Jan 12 17:38:10 2002
+++ linux-2.5.2.11/fs/ext2/super.c Sun Jan 13 17:04:01 2002
@@ -171,9 +171,9 @@
 
         if (!options)
                 return 1;
- for (this_char = strtok (options, ",");
- this_char != NULL;
- this_char = strtok (NULL, ",")) {
+ while ((this_char = strsep (&options, ",")) != NULL) {
+ if (!*this_char)
+ continue;
                 if ((value = strchr (this_char, '=')) != NULL)
                         *value++ = 0;
                 if (!strcmp (this_char, "bsddf"))
diff -ur linux-2.5.2-pre11/fs/ext3/super.c linux-2.5.2.11/fs/ext3/super.c
--- linux-2.5.2-pre11/fs/ext3/super.c Sat Jan 12 17:38:10 2002
+++ linux-2.5.2.11/fs/ext3/super.c Sun Jan 13 17:05:38 2002
@@ -504,9 +504,9 @@
 
         if (!options)
                 return 1;
- for (this_char = strtok (options, ",");
- this_char != NULL;
- this_char = strtok (NULL, ",")) {
+ while ((this_char = strsep (&options, ",")) != NULL) {
+ if (!*this_char)
+ continue;
                 if ((value = strchr (this_char, '=')) != NULL)
                         *value++ = 0;
                 if (!strcmp (this_char, "bsddf"))
diff -ur linux-2.5.2-pre11/fs/hfs/super.c linux-2.5.2.11/fs/hfs/super.c
--- linux-2.5.2-pre11/fs/hfs/super.c Sat Jan 12 17:38:10 2002
+++ linux-2.5.2.11/fs/hfs/super.c Sun Jan 13 16:45:43 2002
@@ -181,8 +181,9 @@
         if (!options) {
                 goto done;
         }
- for (this_char = strtok(options,","); this_char;
- this_char = strtok(NULL,",")) {
+ while ((this_char = strsep(&options,",")) != NULL) {
+ if (!*this_char)
+ continue;
                 if ((value = strchr(this_char,'=')) != NULL) {
                         *value++ = 0;
                 }
diff -ur linux-2.5.2-pre11/fs/hpfs/super.c linux-2.5.2.11/fs/hpfs/super.c
--- linux-2.5.2-pre11/fs/hpfs/super.c Sat Jan 12 17:38:10 2002
+++ linux-2.5.2.11/fs/hpfs/super.c Sun Jan 13 17:07:24 2002
@@ -176,7 +176,9 @@
 
         /*printk("Parsing opts: '%s'\n",opts);*/
 
- for (p = strtok(opts, ","); p != 0; p = strtok(0, ",")) {
+ while ((p = strsep(&opts, ",")) != NULL) {
+ if (!*p)
+ continue;
                 if ((rhs = strchr(p, '=')) != 0)
                         *rhs++ = '\0';
                 if (!strcmp(p, "help")) return 2;
diff -ur linux-2.5.2-pre11/fs/intermezzo/super.c linux-2.5.2.11/fs/intermezzo/super.c
--- linux-2.5.2-pre11/fs/intermezzo/super.c Sat Jan 12 17:38:11 2002
+++ linux-2.5.2.11/fs/intermezzo/super.c Sun Jan 13 17:00:07 2002
@@ -120,10 +120,10 @@
         store_opt(prestodev, NULL, PRESTO_PSDEV_NAME "0");
 
         CDEBUG(D_SUPER, "parsing options\n");
- for (this_char = strtok (options, ",");
- this_char != NULL;
- this_char = strtok (NULL, ",")) {
+ while ((this_char = strsep (&options, ",")) != NULL) {
                 char *opt;
+ if (!*this_char)
+ continue;
                 CDEBUG(D_SUPER, "this_char %s\n", this_char);
 
                 if ( (opt = read_opt("fileset", this_char)) ) {
diff -ur linux-2.5.2-pre11/fs/isofs/inode.c linux-2.5.2.11/fs/isofs/inode.c
--- linux-2.5.2-pre11/fs/isofs/inode.c Sat Jan 12 17:38:11 2002
+++ linux-2.5.2.11/fs/isofs/inode.c Sun Jan 13 17:15:48 2002
@@ -294,7 +294,9 @@
         popt->session=-1;
         popt->sbsector=-1;
         if (!options) return 1;
- for (this_char = strtok(options,","); this_char; this_char = strtok(NULL,",")) {
+ while ((this_char = strsep(&options,",")) != NULL) {
+ if (!*this_char)
+ continue;
                 if (strncmp(this_char,"norock",6) == 0) {
                   popt->rock = 'n';
                   continue;
diff -ur linux-2.5.2-pre11/fs/nfs/nfsroot.c linux-2.5.2.11/fs/nfs/nfsroot.c
--- linux-2.5.2-pre11/fs/nfs/nfsroot.c Sat Jan 12 17:38:11 2002
+++ linux-2.5.2.11/fs/nfs/nfsroot.c Sun Jan 13 16:47:27 2002
@@ -202,8 +202,9 @@
 
         if ((options = strchr(name, ','))) {
                 *options++ = 0;
- cp = strtok(options, ",");
- while (cp) {
+ while ((cp = strsep(&options, ",")) != NULL) {
+ if (!*cp)
+ continue;
                         if ((val = strchr(cp, '='))) {
                                 struct nfs_int_opts *opts = root_int_opts;
                                 *val++ = '\0';
@@ -220,7 +221,6 @@
                                         nfs_data.flags |= opts->or_mask;
                                 }
                         }
- cp = strtok(NULL, ",");
                 }
         }
         if (name[0] && strcmp(name, "default")) {
diff -ur linux-2.5.2-pre11/fs/ntfs/fs.c linux-2.5.2.11/fs/ntfs/fs.c
--- linux-2.5.2-pre11/fs/ntfs/fs.c Sat Jan 12 17:38:12 2002
+++ linux-2.5.2.11/fs/ntfs/fs.c Sun Jan 13 17:10:47 2002
@@ -361,10 +361,13 @@
         int use_utf8 = -1; /* If no NLS specified and loading the default
                                    NLS failed use utf8. */
         int mft_zone_mul = -1; /* 1 */
+ char *opts = opt;
 
         if (!opt)
                 goto done;
- for (opt = strtok(opt, ","); opt; opt = strtok(NULL, ",")) {
+ while ((opt = strsep(&opts, ",")) != NULL) {
+ if (!*opt)
+ continue;
                 if ((value = strchr(opt, '=')) != NULL)
                         *value ++= '\0';
                 if (strcmp(opt, "uid") == 0) {
diff -ur linux-2.5.2-pre11/fs/proc/inode.c linux-2.5.2.11/fs/proc/inode.c
--- linux-2.5.2-pre11/fs/proc/inode.c Sat Nov 17 20:24:32 2001
+++ linux-2.5.2.11/fs/proc/inode.c Sun Jan 13 17:11:49 2002
@@ -106,7 +106,9 @@
         *uid = current->uid;
         *gid = current->gid;
         if (!options) return 1;
- for (this_char = strtok(options,","); this_char; this_char = strtok(NULL,",")) {
+ while ((this_char = strsep(&options,",")) != NULL) {
+ if (!*this_char)
+ continue;
                 if ((value = strchr(this_char,'=')) != NULL)
                         *value++ = 0;
                 if (!strcmp(this_char,"uid")) {
diff -ur linux-2.5.2-pre11/fs/reiserfs/super.c linux-2.5.2.11/fs/reiserfs/super.c
--- linux-2.5.2-pre11/fs/reiserfs/super.c Sat Jan 12 17:38:13 2002
+++ linux-2.5.2.11/fs/reiserfs/super.c Sun Jan 13 17:13:26 2002
@@ -154,7 +154,9 @@
         /* use default configuration: create tails, journaling on, no
            conversion to newest format */
         return 1;
- for (this_char = strtok (options, ","); this_char != NULL; this_char = strtok (NULL, ",")) {
+ while ((this_char = strsep (&options, ",")) != NULL) {
+ if (!*this_char)
+ continue;
         if ((value = strchr (this_char, '=')) != NULL)
             *value++ = 0;
         if (!strcmp (this_char, "notail")) {
diff -ur linux-2.5.2-pre11/fs/udf/super.c linux-2.5.2.11/fs/udf/super.c
--- linux-2.5.2-pre11/fs/udf/super.c Sat Jan 12 17:38:14 2002
+++ linux-2.5.2.11/fs/udf/super.c Sun Jan 13 18:49:52 2002
@@ -218,8 +218,10 @@
         if (!options)
                 return 1;
 
- for (opt = strtok(options, ","); opt; opt = strtok(NULL, ","))
+ while ((opt = strsep(&options, ",")) != NULL)
         {
+ if (!*opt)
+ continue;
                 /* Make "opt=val" into two strings */
                 val = strchr(opt, '=');
                 if (val)
diff -ur linux-2.5.2-pre11/fs/ufs/super.c linux-2.5.2.11/fs/ufs/super.c
--- linux-2.5.2-pre11/fs/ufs/super.c Sat Jan 12 17:38:14 2002
+++ linux-2.5.2.11/fs/ufs/super.c Sun Jan 13 16:53:49 2002
@@ -258,10 +258,9 @@
         if (!options)
                 return 1;
                 
- for (this_char = strtok (options, ",");
- this_char != NULL;
- this_char = strtok (NULL, ",")) {
-
+ while ((this_char = strsep (&options, ",")) != NULL) {
+ if (!*this_char)
+ continue;
                 if ((value = strchr (this_char, '=')) != NULL)
                         *value++ = 0;
                 if (!strcmp (this_char, "ufstype")) {
diff -ur linux-2.5.2-pre11/mm/shmem.c linux-2.5.2.11/mm/shmem.c
--- linux-2.5.2-pre11/mm/shmem.c Wed Nov 21 18:57:57 2001
+++ linux-2.5.2.11/mm/shmem.c Sun Jan 13 18:40:00 2002
@@ -1197,10 +1197,9 @@
 {
         char *this_char, *value, *rest;
 
- this_char = NULL;
- if ( options )
- this_char = strtok(options,",");
- for ( ; this_char; this_char = strtok(NULL,",")) {
+ while ((this_char = strsep(&options, ",")) != NULL) {
+ if (!*this_char)
+ continue;
                 if ((value = strchr(this_char,'=')) != NULL) {
                         *value++ = 0;
                 } else {
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Tue Jan 15 2002 - 21:00:53 EST