summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlejandro Colomar <alx@kernel.org>2024-01-15 16:20:03 +0100
committerSerge Hallyn <serge@hallyn.com>2024-03-14 17:11:36 -0500
commit5f8f19f2678d29e3ab78d8506fe71da3e48bf283 (patch)
treefaeb7bfcc3b348b135466aea97b4c19a8abf927f
parentbed18501b1a198a4c5cb177a4cff8685e5a81abf (diff)
lib/: Call strchrnul(3) instead of open-coding it
Performance tests made in 2007 are obsolete. We should assume libc is reasonably fast today (otherwise, report a bug to libc). $ git blame -- lib/sgetgrent.c | grep strchr 45c6603cc (nekral-guest 2007-10-07 11:44:02 +0000 30) * WARNING: I profiled this once with and without strchr() calls 6f88bcf58 (nekral-guest 2008-05-26 08:31:14 +0000 97) cp = strchr (cp, ':'); Signed-off-by: Alejandro Colomar <alx@kernel.org>
-rw-r--r--lib/sgetgrent.c12
-rw-r--r--lib/sgetpwent.c11
-rw-r--r--lib/sgetspent.c15
-rw-r--r--lib/subordinateio.c8
4 files changed, 24 insertions, 22 deletions
diff --git a/lib/sgetgrent.c b/lib/sgetgrent.c
index 6894baf9..24764ecd 100644
--- a/lib/sgetgrent.c
+++ b/lib/sgetgrent.c
@@ -14,6 +14,7 @@
#include <stdio.h>
#include <sys/types.h>
#include <grp.h>
+#include <string.h>
#include "alloc.h"
#include "defines.h"
@@ -27,14 +28,11 @@
* list() converts the comma-separated list of member names into
* an array of character pointers.
*
- * WARNING: I profiled this once with and without strchr() calls
- * and found that using a register variable and an explicit loop
- * works best. For large /etc/group files, this is a major win.
- *
* FINALLY added dynamic allocation. Still need to fix sgetsgent().
* --marekm
*/
-static char **list (char *s)
+static char **
+list(char *s)
{
static char **members = NULL;
static size_t size = 0; /* max members + 1 */
@@ -55,9 +53,7 @@ static char **list (char *s)
if (!s || s[0] == '\0')
break;
members[i++] = s;
- while (('\0' != *s) && (',' != *s)) {
- s++;
- }
+ s = strchrnul(s, ',');
if ('\0' != *s) {
*s++ = '\0';
}
diff --git a/lib/sgetpwent.c b/lib/sgetpwent.c
index 8dba02f8..d60a7fe1 100644
--- a/lib/sgetpwent.c
+++ b/lib/sgetpwent.c
@@ -12,9 +12,11 @@
#ident "$Id$"
#include <sys/types.h>
-#include "defines.h"
#include <stdio.h>
#include <pwd.h>
+#include <string.h>
+
+#include "defines.h"
#include "prototypes.h"
#include "shadowlog_internal.h"
@@ -32,7 +34,8 @@
* performance reasons. I am going to come up with some conditional
* compilation glarp to improve on this in the future.
*/
-struct passwd *sgetpwent (const char *buf)
+struct passwd *
+sgetpwent(const char *buf)
{
static struct passwd pwent;
static char pwdbuf[PASSWD_ENTRY_MAX_LENGTH];
@@ -60,9 +63,7 @@ struct passwd *sgetpwent (const char *buf)
for (cp = pwdbuf, i = 0; (i < NFIELDS) && (NULL != cp); i++) {
fields[i] = cp;
- while (('\0' != *cp) && (':' != *cp)) {
- cp++;
- }
+ cp = strchrnul(cp, ':');
if ('\0' != *cp) {
*cp = '\0';
diff --git a/lib/sgetspent.c b/lib/sgetspent.c
index 184fbc16..07104924 100644
--- a/lib/sgetspent.c
+++ b/lib/sgetspent.c
@@ -14,17 +14,24 @@
#ident "$Id$"
+#include <stdio.h>
#include <sys/types.h>
+#include <string.h>
+
#include "prototypes.h"
#include "shadowlog_internal.h"
#include "defines.h"
-#include <stdio.h>
+
+
#define FIELDS 9
#define OFIELDS 5
+
+
/*
* sgetspent - convert string in shadow file format to (struct spwd *)
*/
-struct spwd *sgetspent (const char *string)
+struct spwd *
+sgetspent(const char *string)
{
static char spwbuf[PASSWD_ENTRY_MAX_LENGTH];
static struct spwd spwd;
@@ -57,9 +64,7 @@ struct spwd *sgetspent (const char *string)
for (cp = spwbuf, i = 0; ('\0' != *cp) && (i < FIELDS); i++) {
fields[i] = cp;
- while (('\0' != *cp) && (':' != *cp)) {
- cp++;
- }
+ cp = strchrnul(cp, ':');
if ('\0' != *cp) {
*cp = '\0';
diff --git a/lib/subordinateio.c b/lib/subordinateio.c
index 844de5f0..85bc0adc 100644
--- a/lib/subordinateio.c
+++ b/lib/subordinateio.c
@@ -16,6 +16,7 @@
#include <pwd.h>
#include <ctype.h>
#include <fcntl.h>
+#include <string.h>
#include "alloc.h"
#include "string/sprintf.h"
@@ -74,7 +75,8 @@ subordinate_free(/*@only@*/void *ent)
* in @line, or NULL on failure. Note that the returned value should not
* be freed by the caller.
*/
-static void *subordinate_parse (const char *line)
+static void *
+subordinate_parse(const char *line)
{
static struct subordinate_range range;
static char rangebuf[1024];
@@ -97,9 +99,7 @@ static void *subordinate_parse (const char *line)
for (cp = rangebuf, i = 0; (i < SUBID_NFIELDS) && (NULL != cp); i++) {
fields[i] = cp;
- while (('\0' != *cp) && (':' != *cp)) {
- cp++;
- }
+ cp = strchrnul(cp, ':');
if ('\0' != *cp) {
*cp = '\0';