Add a new sysfs_streq() string comparison function
Add a new sysfs_streq() string comparison function, which ignores the trailing newlines found in sysfs inputs. By example: sysfs_streq("a", "b") ==> false sysfs_streq("a", "a") ==> true sysfs_streq("a", "a\n") ==> true sysfs_streq("a\n", "a") ==> true This is intended to simplify parsing of sysfs inputs, letting them avoid the need to manually strip off newlines from inputs. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Acked-by: Greg KH <greg@kroah.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
7dffa3c673
commit
34990cf702
|
@ -109,5 +109,7 @@ extern void *kmemdup(const void *src, size_t len, gfp_t gfp);
|
||||||
extern char **argv_split(gfp_t gfp, const char *str, int *argcp);
|
extern char **argv_split(gfp_t gfp, const char *str, int *argcp);
|
||||||
extern void argv_free(char **argv);
|
extern void argv_free(char **argv);
|
||||||
|
|
||||||
|
extern bool sysfs_streq(const char *s1, const char *s2);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif /* _LINUX_STRING_H_ */
|
#endif /* _LINUX_STRING_H_ */
|
||||||
|
|
27
lib/string.c
27
lib/string.c
|
@ -493,6 +493,33 @@ char *strsep(char **s, const char *ct)
|
||||||
EXPORT_SYMBOL(strsep);
|
EXPORT_SYMBOL(strsep);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sysfs_streq - return true if strings are equal, modulo trailing newline
|
||||||
|
* @s1: one string
|
||||||
|
* @s2: another string
|
||||||
|
*
|
||||||
|
* This routine returns true iff two strings are equal, treating both
|
||||||
|
* NUL and newline-then-NUL as equivalent string terminations. It's
|
||||||
|
* geared for use with sysfs input strings, which generally terminate
|
||||||
|
* with newlines but are compared against values without newlines.
|
||||||
|
*/
|
||||||
|
bool sysfs_streq(const char *s1, const char *s2)
|
||||||
|
{
|
||||||
|
while (*s1 && *s1 == *s2) {
|
||||||
|
s1++;
|
||||||
|
s2++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*s1 == *s2)
|
||||||
|
return true;
|
||||||
|
if (!*s1 && *s2 == '\n' && !s2[1])
|
||||||
|
return true;
|
||||||
|
if (*s1 == '\n' && !s1[1] && !*s2)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(sysfs_streq);
|
||||||
|
|
||||||
#ifndef __HAVE_ARCH_MEMSET
|
#ifndef __HAVE_ARCH_MEMSET
|
||||||
/**
|
/**
|
||||||
* memset - Fill a region of memory with the given value
|
* memset - Fill a region of memory with the given value
|
||||||
|
|
Loading…
Reference in New Issue