Messages in this thread Patch in this message | | | Date | Tue, 15 Jan 2002 22:09:01 +0100 | From | René Scharfe <> | Subject | [PATCH] strtok --> strsep (again) |
| |
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/
| |