lib: [strutils] general purpose string handling functions
This patch replaces a few functions used throughout the source: * Renames getnum (from schedutils) to strtol_or_err * Moves strtosize (from lib/strtosize.c) * Moves xstrncpy (from include/xstrncpy.h) * Adds strnlen, strnchr and strndup if not available (remove it from libmount utils) A few Makefile.am files were modified to compile accordingly along with trivial renaming in schedutils source code. Signed-off-by: Davidlohr Bueso <dave@gnu.org>
This commit is contained in:
parent
e8fc977aba
commit
8abcf29002
|
@ -48,7 +48,7 @@
|
|||
|
||||
#include "linux_version.h"
|
||||
#include "swapheader.h"
|
||||
#include "xstrncpy.h"
|
||||
#include "strutils.h"
|
||||
#include "nls.h"
|
||||
#include "blkdev.h"
|
||||
#include "pathnames.h"
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
#include "c.h"
|
||||
#include "writeall.h"
|
||||
#include "swapheader.h"
|
||||
#include "xstrncpy.h"
|
||||
#include "strutils.h"
|
||||
#include "nls.h"
|
||||
|
||||
#define SWAP_UUID_OFFSET (offsetof(struct swap_header_v1_2, uuid))
|
||||
|
|
|
@ -99,7 +99,7 @@
|
|||
|
||||
#include "nls.h"
|
||||
#include "blkdev.h"
|
||||
#include "xstrncpy.h"
|
||||
#include "strutils.h"
|
||||
#include "common.h"
|
||||
#include "gpt.h"
|
||||
#include "mbsalign.h"
|
||||
|
|
|
@ -20,11 +20,10 @@ dist_noinst_HEADERS = \
|
|||
nls.h \
|
||||
pathnames.h \
|
||||
setproctitle.h \
|
||||
strtosize.h \
|
||||
strutils.h \
|
||||
swapheader.h \
|
||||
tt.h \
|
||||
usleep.h \
|
||||
wholedisk.h \
|
||||
widechar.h \
|
||||
writeall.h \
|
||||
xstrncpy.h
|
||||
writeall.h
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
#ifndef UTIL_LINUX_STRTOSIZE
|
||||
#define UTIL_LINUX_STRTOSIZE
|
||||
|
||||
#include <inttypes.h>
|
||||
|
||||
extern int strtosize(const char *str, uintmax_t *res);
|
||||
|
||||
#endif /* UTIL_LINUX_STRING_TO_NUMBE */
|
|
@ -0,0 +1,26 @@
|
|||
#ifndef UTIL_LINUX_STRUTILS
|
||||
#define UTIL_LINUX_STRUTILS
|
||||
|
||||
#include <inttypes.h>
|
||||
#include <string.h>
|
||||
|
||||
extern int strtosize(const char *str, uintmax_t *res);
|
||||
extern long strtol_or_err(const char *str, const char *errmesg);
|
||||
|
||||
#ifndef HAVE_STRNLEN
|
||||
extern size_t strnlen(const char *s, size_t maxlen);
|
||||
#endif
|
||||
#ifndef HAVE_STRNDUP
|
||||
extern char *strndup(const char *s, size_t n);
|
||||
#endif
|
||||
#ifndef HAVE_STRNCHR
|
||||
extern char *strnchr(const char *s, size_t maxlen, int c);
|
||||
#endif
|
||||
|
||||
/* caller guarantees n > 0 */
|
||||
static inline void xstrncpy(char *dest, const char *src, size_t n)
|
||||
{
|
||||
strncpy(dest, src, n-1);
|
||||
dest[n-1] = 0;
|
||||
}
|
||||
#endif
|
|
@ -1,8 +0,0 @@
|
|||
/* NUL-terminated version of strncpy() */
|
||||
#include <string.h>
|
||||
|
||||
/* caller guarantees n > 0 */
|
||||
static inline void xstrncpy(char *dest, const char *src, size_t n) {
|
||||
strncpy(dest, src, n-1);
|
||||
dest[n-1] = 0;
|
||||
}
|
|
@ -3,7 +3,7 @@ include $(top_srcdir)/config/include-Makefile.am
|
|||
AM_CPPFLAGS += -DTEST_PROGRAM
|
||||
|
||||
noinst_PROGRAMS = test_blkdev test_ismounted test_wholedisk test_mangle \
|
||||
test_strtosize test_tt test_canonicalize
|
||||
test_tt test_canonicalize
|
||||
if LINUX
|
||||
if HAVE_CPU_SET_T
|
||||
noinst_PROGRAMS += test_cpuset
|
||||
|
@ -14,7 +14,6 @@ test_blkdev_SOURCES = blkdev.c
|
|||
test_ismounted_SOURCES = ismounted.c
|
||||
test_wholedisk_SOURCES = wholedisk.c
|
||||
test_mangle_SOURCES = mangle.c
|
||||
test_strtosize_SOURCES = strtosize.c
|
||||
if LINUX
|
||||
test_cpuset_SOURCES = cpuset.c
|
||||
endif
|
||||
|
|
|
@ -1,3 +1,24 @@
|
|||
/*
|
||||
* Copyright (C) 2010 Karel Zak <kzak@redhat.com>
|
||||
* Copyright (C) 2010 Davidlohr Bueso <dave@gnu.org>
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <inttypes.h>
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <err.h>
|
||||
|
||||
static int do_scale_by_power (uintmax_t *x, int base, int power)
|
||||
{
|
||||
while (power--) {
|
||||
if (UINTMAX_MAX / base < *x)
|
||||
return -2;
|
||||
*x *= base;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* strtosize() - convert string to size (uintmax_t).
|
||||
*
|
||||
|
@ -17,26 +38,7 @@
|
|||
*
|
||||
* Note that the function does not accept numbers with '-' (negative sign)
|
||||
* prefix.
|
||||
*
|
||||
* Returns 0 on success, -1 in case of error, -2 in case of overflow.
|
||||
*
|
||||
* Copyright (C) 2010 Karel Zak <kzak@redhat.com>
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <inttypes.h>
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
|
||||
static int do_scale_by_power (uintmax_t *x, int base, int power)
|
||||
{
|
||||
while (power--) {
|
||||
if (UINTMAX_MAX / base < *x)
|
||||
return -2;
|
||||
*x *= base;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int strtosize(const char *str, uintmax_t *res)
|
||||
{
|
||||
char *p;
|
||||
|
@ -123,26 +125,62 @@ err:
|
|||
return -1;
|
||||
}
|
||||
|
||||
#ifdef TEST_PROGRAM
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <err.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
#ifndef HAVE_STRNLEN
|
||||
size_t strnlen(const char *s, size_t maxlen)
|
||||
{
|
||||
uintmax_t size = 0;
|
||||
int i;
|
||||
|
||||
if (argc < 2) {
|
||||
fprintf(stderr, "usage: %s <number>[suffix]\n", argv[0]);
|
||||
exit(EXIT_FAILURE);
|
||||
for (i = 0; i < maxlen; i++) {
|
||||
if (s[i] == '\0')
|
||||
return i + 1;
|
||||
}
|
||||
|
||||
if (strtosize(argv[1], &size))
|
||||
errx(EXIT_FAILURE, "invalid size '%s' value", argv[1]);
|
||||
|
||||
printf("%25s : %20ju\n", argv[1], size);
|
||||
return EXIT_FAILURE;
|
||||
return maxlen;
|
||||
}
|
||||
#endif /* TEST_PROGRAM */
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRNCHR
|
||||
char *strnchr(const char *s, size_t maxlen, int c)
|
||||
{
|
||||
for (; maxlen-- && *s != '\0'; ++s)
|
||||
if (*s == (char)c)
|
||||
return (char *)s;
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRNDUP
|
||||
char *strndup(const char *s, size_t n)
|
||||
{
|
||||
size_t len = strnlen(s, n);
|
||||
char *new = (char *) malloc((len + 1) * sizeof(char));
|
||||
if (!new)
|
||||
return NULL;
|
||||
new[len] = '\0';
|
||||
return (char *) memcpy(new, s, len);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* same as strtol(3) but exit on failure instead of returning crap
|
||||
*/
|
||||
long strtol_or_err(const char *str, const char *errmesg)
|
||||
{
|
||||
long num;
|
||||
char *end = NULL;
|
||||
|
||||
if (str == NULL || *str == '\0')
|
||||
goto err;
|
||||
errno = 0;
|
||||
num = strtol(str, &end, 10);
|
||||
|
||||
if (errno || (end && *end))
|
||||
goto err;
|
||||
|
||||
return num;
|
||||
err:
|
||||
if (errno)
|
||||
err(EXIT_FAILURE, "%s: '%s'", errmesg, str);
|
||||
else
|
||||
errx(EXIT_FAILURE, "%s: '%s'", errmesg, str);
|
||||
return 0;
|
||||
}
|
|
@ -32,7 +32,7 @@
|
|||
#include <sys/socket.h>
|
||||
#include <netdb.h>
|
||||
|
||||
#include "xstrncpy.h"
|
||||
#include "strutils.h"
|
||||
#include "nls.h"
|
||||
#include "pathnames.h"
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
|
||||
#include "pathnames.h"
|
||||
#include "login.h"
|
||||
#include "xstrncpy.h"
|
||||
#include "strutils.h"
|
||||
|
||||
#ifndef TTY_MAJOR
|
||||
#define TTY_MAJOR 4
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
#include "my_crypt.h"
|
||||
#include "islocal.h"
|
||||
#include "setpwnam.h"
|
||||
#include "xstrncpy.h"
|
||||
#include "strutils.h"
|
||||
#include "nls.h"
|
||||
#include "env.h"
|
||||
|
||||
|
|
|
@ -113,7 +113,7 @@
|
|||
#include "pathnames.h"
|
||||
#include "my_crypt.h"
|
||||
#include "login.h"
|
||||
#include "xstrncpy.h"
|
||||
#include "strutils.h"
|
||||
#include "nls.h"
|
||||
|
||||
|
||||
|
|
|
@ -74,7 +74,7 @@
|
|||
#include <sys/utsname.h>
|
||||
#include "linux_reboot.h"
|
||||
#include "pathnames.h"
|
||||
#include "xstrncpy.h"
|
||||
#include "strutils.h"
|
||||
#include "nls.h"
|
||||
#include "usleep.h"
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
#include "my_crypt.h"
|
||||
#include "pathnames.h"
|
||||
#include "linux_reboot.h"
|
||||
#include "xstrncpy.h"
|
||||
#include "strutils.h"
|
||||
#include "nls.h"
|
||||
#include "simpleinit.h"
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ static char version_string[] = "vipw 1.4";
|
|||
#include <unistd.h>
|
||||
|
||||
#include "setpwnam.h"
|
||||
#include "xstrncpy.h"
|
||||
#include "strutils.h"
|
||||
#include "nls.h"
|
||||
|
||||
#ifdef HAVE_LIBSELINUX
|
||||
|
|
|
@ -58,7 +58,7 @@
|
|||
#include <utmp.h>
|
||||
|
||||
#include "nls.h"
|
||||
#include "xstrncpy.h"
|
||||
#include "strutils.h"
|
||||
#include "ttymsg.h"
|
||||
#include "pathnames.h"
|
||||
#include "carefulputc.h"
|
||||
|
|
|
@ -37,12 +37,12 @@ if BUILD_LIBBLKID
|
|||
sbin_PROGRAMS += blkid findfs wipefs
|
||||
dist_man_MANS += blkid.8 findfs.8 wipefs.8
|
||||
blkid_SOURCES = blkid.c $(top_srcdir)/lib/ismounted.c \
|
||||
$(top_srcdir)/lib/strtosize.c
|
||||
$(top_srcdir)/lib/strutils.c
|
||||
blkid_LDADD = $(ul_libblkid_la)
|
||||
blkid_CFLAGS = $(AM_CFLAGS) -I$(ul_libblkid_incdir)
|
||||
findfs_LDADD = $(ul_libblkid_la)
|
||||
findfs_CFLAGS = $(AM_CFLAGS) -I$(ul_libblkid_incdir)
|
||||
wipefs_SOURCES = wipefs.c $(top_srcdir)/lib/strtosize.c
|
||||
wipefs_SOURCES = wipefs.c $(top_srcdir)/lib/strutils.c
|
||||
wipefs_LDADD = $(ul_libblkid_la)
|
||||
wipefs_CFLAGS = $(AM_CFLAGS) -I$(ul_libblkid_incdir)
|
||||
if HAVE_STATIC_BLKID
|
||||
|
|
|
@ -41,7 +41,7 @@ extern int optind;
|
|||
#include <blkid.h>
|
||||
|
||||
#include "ismounted.h"
|
||||
#include "strtosize.h"
|
||||
#include "strutils.h"
|
||||
|
||||
const char *progname = "blkid";
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
|
||||
#include "nls.h"
|
||||
#include "xalloc.h"
|
||||
#include "strtosize.h"
|
||||
#include "strutils.h"
|
||||
|
||||
struct wipe_desc {
|
||||
loff_t offset; /* magic string offset */
|
||||
|
|
|
@ -28,12 +28,12 @@ cflags_common = $(AM_CFLAGS)
|
|||
ldflags_static = -all-static
|
||||
|
||||
mount_SOURCES = mount.c $(srcs_mount) $(top_srcdir)/lib/setproctitle.c \
|
||||
$(top_srcdir)/lib/strtosize.c
|
||||
$(top_srcdir)/lib/strutils.c
|
||||
mount_CFLAGS = $(SUID_CFLAGS) $(cflags_common)
|
||||
mount_LDFLAGS = $(SUID_LDFLAGS) $(AM_LDFLAGS)
|
||||
mount_LDADD = $(ldadd_common)
|
||||
|
||||
umount_SOURCES = umount.c $(srcs_mount) $(top_srcdir)/lib/strtosize.c
|
||||
umount_SOURCES = umount.c $(srcs_mount) $(top_srcdir)/lib/strutils.c
|
||||
umount_CFLAGS = $(SUID_CFLAGS) $(cflags_common)
|
||||
umount_LDFLAGS = $(SUID_LDFLAGS) $(AM_LDFLAGS)
|
||||
umount_LDADD = $(ldadd_common)
|
||||
|
@ -45,7 +45,7 @@ swapon_CFLAGS = $(cflags_common)
|
|||
swapon_LDADD = $(ldadd_common)
|
||||
|
||||
losetup_SOURCES = lomount.c $(srcs_common) loop.h lomount.h \
|
||||
$(top_srcdir)/lib/strtosize.c
|
||||
$(top_srcdir)/lib/strutils.c
|
||||
losetup_CPPFLAGS = -DMAIN $(AM_CPPFLAGS)
|
||||
|
||||
mount_static_LDADD =
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
#include "loop.h"
|
||||
#include "lomount.h"
|
||||
#include "xstrncpy.h"
|
||||
#include "strutils.h"
|
||||
#include "nls.h"
|
||||
#include "sundries.h"
|
||||
#include "xmalloc.h"
|
||||
|
@ -886,7 +886,7 @@ find_unused_loop_device (void) {
|
|||
#include <getopt.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "strtosize.h"
|
||||
#include "strutils.h"
|
||||
|
||||
static void
|
||||
usage(FILE *f) {
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
#include "env.h"
|
||||
#include "nls.h"
|
||||
#include "blkdev.h"
|
||||
#include "strtosize.h"
|
||||
#include "strutils.h"
|
||||
|
||||
#define DO_PS_FIDDLING
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
#include "fstab.h"
|
||||
#include "env.h"
|
||||
#include "nls.h"
|
||||
#include "strtosize.h"
|
||||
#include "strutils.h"
|
||||
|
||||
#if defined(MNT_FORCE)
|
||||
/* Interesting ... it seems libc knows about MNT_FORCE and presumably
|
||||
|
|
|
@ -2,7 +2,7 @@ include $(top_srcdir)/config/include-Makefile.am
|
|||
|
||||
if BUILD_SCHEDUTILS
|
||||
|
||||
srcs_common = schedutils.c schedutils.h
|
||||
srcs_common = $(top_srcdir)/lib/strutils.c
|
||||
|
||||
usrbin_exec_PROGRAMS = chrt
|
||||
dist_man_MANS = chrt.1
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
#include "c.h"
|
||||
#include "nls.h"
|
||||
|
||||
#include "schedutils.h"
|
||||
#include "strutils.h"
|
||||
|
||||
/* the SCHED_BATCH is supported since Linux 2.6.16
|
||||
* -- temporary workaround for people with old glibc headers
|
||||
|
@ -240,7 +240,7 @@ int main(int argc, char *argv[])
|
|||
break;
|
||||
case 'p':
|
||||
errno = 0;
|
||||
pid = getnum(argv[argc - 1], _("failed to parse pid"));
|
||||
pid = strtol_or_err(argv[argc - 1], _("failed to parse pid"));
|
||||
break;
|
||||
case 'r':
|
||||
policy = SCHED_RR;
|
||||
|
@ -268,7 +268,7 @@ int main(int argc, char *argv[])
|
|||
}
|
||||
|
||||
errno = 0;
|
||||
priority = getnum(argv[optind], _("failed to parse priority"));
|
||||
priority = strtol_or_err(argv[optind], _("failed to parse priority"));
|
||||
|
||||
#ifdef SCHED_RESET_ON_FORK
|
||||
/* sanity check */
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
#include "nls.h"
|
||||
|
||||
#include "schedutils.h"
|
||||
#include "strutils.h"
|
||||
|
||||
static int tolerant;
|
||||
|
||||
|
@ -105,15 +105,15 @@ int main(int argc, char *argv[])
|
|||
while ((c = getopt(argc, argv, "+n:c:p:th")) != EOF) {
|
||||
switch (c) {
|
||||
case 'n':
|
||||
ioprio = getnum(optarg, _("failed to parse class data"));
|
||||
ioprio = strtol_or_err(optarg, _("failed to parse class data"));
|
||||
set |= 1;
|
||||
break;
|
||||
case 'c':
|
||||
ioclass = getnum(optarg, _("failed to parse class"));
|
||||
ioclass = strtol_or_err(optarg, _("failed to parse class"));
|
||||
set |= 2;
|
||||
break;
|
||||
case 'p':
|
||||
pid = getnum(optarg, _("failed to parse pid"));
|
||||
pid = strtol_or_err(optarg, _("failed to parse pid"));
|
||||
break;
|
||||
case 't':
|
||||
tolerant = 1;
|
||||
|
@ -147,7 +147,7 @@ int main(int argc, char *argv[])
|
|||
ioprio_print(pid);
|
||||
|
||||
for(; argv[optind]; ++optind) {
|
||||
pid = getnum(argv[optind], _("failed to parse pid"));
|
||||
pid = strtol_or_err(argv[optind], _("failed to parse pid"));
|
||||
ioprio_print(pid);
|
||||
}
|
||||
} else {
|
||||
|
@ -156,7 +156,7 @@ int main(int argc, char *argv[])
|
|||
|
||||
for(; argv[optind]; ++optind)
|
||||
{
|
||||
pid = getnum(argv[optind], _("failed to parse pid"));
|
||||
pid = strtol_or_err(argv[optind], _("failed to parse pid"));
|
||||
ioprio_setpid(pid, ioprio, ioclass);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,34 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2010 Karel Zak <kzak@redhat.com>
|
||||
*
|
||||
* Released under the terms of the GNU General Public License version 2
|
||||
*
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <err.h>
|
||||
|
||||
#include "nls.h"
|
||||
|
||||
long getnum(const char *str, const char *errmesg)
|
||||
{
|
||||
long num;
|
||||
char *end = NULL;
|
||||
|
||||
if (str == NULL || *str == '\0')
|
||||
goto err;
|
||||
errno = 0;
|
||||
num = strtol(str, &end, 10);
|
||||
|
||||
if (errno || (end && *end))
|
||||
goto err;
|
||||
|
||||
return num;
|
||||
err:
|
||||
if (errno)
|
||||
err(EXIT_FAILURE, "%s: '%s'", errmesg, str);
|
||||
else
|
||||
errx(EXIT_FAILURE, "%s: '%s'", errmesg, str);
|
||||
return 0;
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
#ifndef UTIL_LINUX_SCHED_UTILS
|
||||
#define UTIL_LINUX_SCHED_UTILS
|
||||
|
||||
extern long getnum(const char *str, const char *errmesg);
|
||||
|
||||
#endif
|
||||
|
|
@ -32,7 +32,7 @@
|
|||
#include "cpuset.h"
|
||||
#include "nls.h"
|
||||
|
||||
#include "schedutils.h"
|
||||
#include "strutils.h"
|
||||
|
||||
static void __attribute__((__noreturn__)) usage(FILE *out)
|
||||
{
|
||||
|
@ -89,7 +89,7 @@ int main(int argc, char *argv[])
|
|||
while ((opt = getopt_long(argc, argv, "+pchV", longopts, NULL)) != -1) {
|
||||
switch (opt) {
|
||||
case 'p':
|
||||
pid = getnum(argv[argc - 1], _("failed to parse pid"));
|
||||
pid = strtol_or_err(argv[argc - 1], _("failed to parse pid"));
|
||||
break;
|
||||
case 'c':
|
||||
c_opt = 1;
|
||||
|
|
|
@ -60,15 +60,6 @@ extern int mnt_run_test(struct mtest *tests, int argc, char *argv[]);
|
|||
|
||||
/* utils.c */
|
||||
extern char *mnt_getenv_safe(const char *arg);
|
||||
#ifndef HAVE_STRNLEN
|
||||
extern size_t strnlen(const char *s, size_t maxlen);
|
||||
#endif
|
||||
#ifndef HAVE_STRNDUP
|
||||
extern char *strndup(const char *s, size_t n);
|
||||
#endif
|
||||
#ifndef HAVE_STRNCHR
|
||||
extern char *strnchr(const char *s, size_t maxlen, int c);
|
||||
#endif
|
||||
extern char *mnt_get_username(const uid_t uid);
|
||||
|
||||
/*
|
||||
|
|
|
@ -51,45 +51,6 @@ char *mnt_getenv_safe(const char *arg)
|
|||
#endif
|
||||
}
|
||||
|
||||
/* TODO: move strn<...> functions to top-level lib/strn.c */
|
||||
#ifndef HAVE_STRNLEN
|
||||
size_t strnlen(const char *s, size_t maxlen)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < maxlen; i++) {
|
||||
if (s[i] == '\0')
|
||||
return i + 1;
|
||||
}
|
||||
return maxlen;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRNCHR
|
||||
char *strnchr(const char *s, size_t maxlen, int c)
|
||||
{
|
||||
for (; maxlen-- && *s != '\0'; ++s)
|
||||
if (*s == (char)c)
|
||||
return (char *)s;
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRNDUP
|
||||
char *strndup(const char *s, size_t n)
|
||||
{
|
||||
size_t len = strnlen (s, n);
|
||||
char *new = (char *) malloc (len + 1);
|
||||
|
||||
if (new == NULL)
|
||||
return NULL;
|
||||
|
||||
new[len] = '\0';
|
||||
return (char *) memcpy (new, s, len);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
* mnt_fstype_is_pseudofs:
|
||||
* @type: filesystem name
|
||||
|
|
|
@ -31,7 +31,7 @@ tunelp_SOURCES = tunelp.c lp.h
|
|||
|
||||
if BUILD_FALLOCATE
|
||||
usrbin_exec_PROGRAMS += fallocate
|
||||
fallocate_SOURCES = fallocate.c $(top_srcdir)/lib/strtosize.c
|
||||
fallocate_SOURCES = fallocate.c $(top_srcdir)/lib/strutils.c
|
||||
dist_man_MANS += fallocate.1
|
||||
endif
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@
|
|||
#endif
|
||||
|
||||
#include "nls.h"
|
||||
#include "strtosize.h"
|
||||
#include "strutils.h"
|
||||
|
||||
|
||||
static void __attribute__((__noreturn__)) usage(FILE *out)
|
||||
|
|
|
@ -56,7 +56,7 @@
|
|||
#include <sys/stat.h>
|
||||
#include <sys/file.h>
|
||||
#include <sys/wait.h>
|
||||
#include "xstrncpy.h"
|
||||
#include "strutils.h"
|
||||
|
||||
#include "nls.h"
|
||||
#include "xalloc.h"
|
||||
|
|
Loading…
Reference in New Issue