[dm-devel] [PATCH v3 85/87] libmultipath: alias.c: use strtok_r() instead of strtok()

Benjamin Marzinski bmarzins at redhat.com
Wed Aug 19 22:16:33 UTC 2020


On Wed, Aug 19, 2020 at 03:18:17PM +0200, mwilck at suse.com wrote:
> From: Martin Wilck <mwilck at suse.com>
> 
> ... for thread-safety.
> 
Reviewed-by: Benjamin Marzinski <bmarzins at redhat.com>
> Suggested-by: Benjamin Marzinski <bmarzins at redhat.com>
> Signed-off-by: Martin Wilck <mwilck at suse.com>
> ---
>  libmultipath/alias.c | 20 ++++++++++----------
>  1 file changed, 10 insertions(+), 10 deletions(-)
> 
> diff --git a/libmultipath/alias.c b/libmultipath/alias.c
> index df44bdc..de28f25 100644
> --- a/libmultipath/alias.c
> +++ b/libmultipath/alias.c
> @@ -141,14 +141,14 @@ lookup_binding(FILE *f, const char *map_wwid, char **map_alias,
>  	rewind(f);
>  	while (fgets(buf, LINE_MAX, f)) {
>  		const char *alias, *wwid;
> -		char *c;
> +		char *c, *saveptr;
>  		int curr_id;
>  
>  		line_nr++;
>  		c = strpbrk(buf, "#\n\r");
>  		if (c)
>  			*c = '\0';
> -		alias = strtok(buf, " \t");
> +		alias = strtok_r(buf, " \t", &saveptr);
>  		if (!alias) /* blank line */
>  			continue;
>  		curr_id = scan_devname(alias, prefix);
> @@ -164,7 +164,7 @@ lookup_binding(FILE *f, const char *map_wwid, char **map_alias,
>  			biggest_id = curr_id;
>  		if (curr_id > id && curr_id < smallest_bigger_id)
>  			smallest_bigger_id = curr_id;
> -		wwid = strtok(NULL, " \t");
> +		wwid = strtok_r(NULL, " \t", &saveptr);
>  		if (!wwid){
>  			condlog(3,
>  				"Ignoring malformed line %u in bindings file",
> @@ -206,17 +206,17 @@ rlookup_binding(FILE *f, char *buff, const char *map_alias)
>  	buff[0] = '\0';
>  
>  	while (fgets(line, LINE_MAX, f)) {
> -		char *c;
> +		char *c, *saveptr;
>  		const char *alias, *wwid;
>  
>  		line_nr++;
>  		c = strpbrk(line, "#\n\r");
>  		if (c)
>  			*c = '\0';
> -		alias = strtok(line, " \t");
> +		alias = strtok_r(line, " \t", &saveptr);
>  		if (!alias) /* blank line */
>  			continue;
> -		wwid = strtok(NULL, " \t");
> +		wwid = strtok_r(NULL, " \t", &saveptr);
>  		if (!wwid){
>  			condlog(3,
>  				"Ignoring malformed line %u in bindings file",
> @@ -582,23 +582,23 @@ static int _check_bindings_file(const struct config *conf, FILE *file,
>  
>  	pthread_cleanup_push(free, line);
>  	while ((n = getline(&line, &line_len, file)) >= 0) {
> -		char *c, *alias, *wwid;
> +		char *c, *alias, *wwid, *saveptr;
>  		const char *mpe_wwid;
>  
>  		linenr++;
>  		c = strpbrk(line, "#\n\r");
>  		if (c)
>  			*c = '\0';
> -		alias = strtok(line, " \t");
> +		alias = strtok_r(line, " \t", &saveptr);
>  		if (!alias) /* blank line */
>  			continue;
> -		wwid = strtok(NULL, " \t");
> +		wwid = strtok_r(NULL, " \t", &saveptr);
>  		if (!wwid) {
>  			condlog(1, "invalid line %d in bindings file, missing WWID",
>  				linenr);
>  			continue;
>  		}
> -		c = strtok(NULL, " \t");
> +		c = strtok_r(NULL, " \t", &saveptr);
>  		if (c)
>  			/* This is non-fatal */
>  			condlog(1, "invalid line %d in bindings file, extra args \"%s\"",
> -- 
> 2.28.0




More information about the dm-devel mailing list