7

I need to do a parse on the data written to my module, and the use of the strtok() function of string.h would be useful. However I've tried

#include <string.h>

and

#include <linux/string.h>

with no success. Is this possible? Or will I have to write my own strtok function?

Thanks

cheesysam
  • 1,109
  • 5
  • 15
  • 32

3 Answers3

17

The latest kernel library has this, which may do what you need:

/**
 * strsep - Split a string into tokens
 * @s: The string to be searched
 * @ct: The characters to search for
 *
 * strsep() updates @s to point after the token, ready for the next call.
 *
 * It returns empty tokens, too, behaving exactly like the libc function
 * of that name. In fact, it was stolen from glibc2 and de-fancy-fied.
 * Same semantics, slimmer shape. ;)
 */
Tim Schaeffer
  • 2,616
  • 1
  • 16
  • 20
8

There is no strtok in the valid Linux Kernel API. You will have to write your own. See the section String Manipulation in the Linux Kernel API.

BTW, I would suggest staying away from strtok (or anything strtok-like). It's not reentrant and is unsafe in kernel code (which is inherently multithreaded).

If you're going to duplicate the function, consider duplicating strtok_r.

0xfe
  • 4,541
  • 1
  • 18
  • 14
2

char *strsep(char **s, const char *ct)

would be the function that you are looking for.
You can look it up in lxr, source/lib/string.c, line 589 (for version/release 4.6)

Aby Sam Ross
  • 87
  • 1
  • 6