[hackers] [ubase] Rename util/ to libutil/ || sin

From: <git_AT_suckless.org>
Date: Sat, 29 Nov 2014 22:46:52 +0100

commit ae7aafc127d8439fad3250afe7b6f28d44690d39
Author: sin <sin_AT_2f30.org>
Date: Sat Nov 29 21:44:07 2014 +0000

    Rename util/ to libutil/

diff --git a/Makefile b/Makefile
index 150ca13..f86fd8f 100644
--- a/Makefile
+++ b/Makefile
_AT_@ -15,22 +15,22 @@ HDR = \
         util.h
 
 LIB = \
- util/agetcwd.o \
- util/agetline.o \
- util/apathmax.o \
- util/concat.o \
- util/ealloc.o \
- util/eprintf.o \
- util/estrtol.o \
- util/estrtoul.o \
- util/explicit_bzero.o \
- util/passwd.o \
- util/proc.o \
- util/putword.o \
- util/recurse.o \
- util/strlcat.o \
- util/strlcpy.o \
- util/tty.o
+ libutil/agetcwd.o \
+ libutil/agetline.o \
+ libutil/apathmax.o \
+ libutil/concat.o \
+ libutil/ealloc.o \
+ libutil/eprintf.o \
+ libutil/estrtol.o \
+ libutil/estrtoul.o \
+ libutil/explicit_bzero.o \
+ libutil/passwd.o \
+ libutil/proc.o \
+ libutil/putword.o \
+ libutil/recurse.o \
+ libutil/strlcat.o \
+ libutil/strlcpy.o \
+ libutil/tty.o
 
 SRC = \
         last.c \
_AT_@ -144,7 +144,7 @@ options:
         _AT_echo "LDFLAGS = $(LDFLAGS)"
         _AT_echo "CC = $(CC)"
 
-binlib: util.a
+binlib: libutil.a
         $(MAKE) bin
 
 bin: $(BIN)
_AT_@ -157,13 +157,13 @@ config.h:
 
 .o:
         _AT_echo LD $@
- _AT_$(LD) -o $@ $< util.a $(LDFLAGS)
+ _AT_$(LD) -o $@ $< libutil.a $(LDFLAGS)
 
 .c.o:
         _AT_echo CC $<
         _AT_$(CC) -c -o $@ $< $(CFLAGS)
 
-util.a: $(LIB)
+libutil.a: $(LIB)
         _AT_echo AR $@
         _AT_$(AR) -r -c $@ $?
         _AT_ranlib $@
_AT_@ -194,12 +194,12 @@ uninstall:
 dist: clean
         _AT_echo creating dist tarball
         _AT_mkdir -p ubase-$(VERSION)
- _AT_cp -r LICENSE Makefile config.mk TODO $(SRC) $(MAN) util $(HDR) ubase-$(VERSION)
+ _AT_cp -r LICENSE Makefile config.mk TODO $(SRC) $(MAN) libutil $(HDR) ubase-$(VERSION)
         _AT_tar -cf ubase-$(VERSION).tar ubase-$(VERSION)
         _AT_gzip ubase-$(VERSION).tar
         _AT_rm -rf ubase-$(VERSION)
 
-ubase-box: config.h $(SRC) util.a
+ubase-box: config.h $(SRC) libutil.a
         _AT_echo creating box binary
         _AT_mkdir -p build
         _AT_cp $(HDR) build
_AT_@ -217,9 +217,9 @@ ubase-box: config.h $(SRC) util.a
         _AT_for f in $(SRC); do echo "printf(\"`basename $$f .c`\"); putchar(' ');" >> build/$@.c; done
         _AT_echo "putchar(0xa); }; return 0; }" >> build/$@.c
         _AT_echo LD $@
- _AT_$(LD) -o $@ build/*.c util.a $(CFLAGS) $(LDFLAGS)
+ _AT_$(LD) -o $@ build/*.c libutil.a $(CFLAGS) $(LDFLAGS)
         _AT_rm -r build
 
 clean:
         _AT_echo cleaning
- _AT_rm -f $(BIN) $(OBJ) $(LIB) util.a ubase-box
+ _AT_rm -f $(BIN) $(OBJ) $(LIB) libutil.a ubase-box
diff --git a/libutil/agetcwd.c b/libutil/agetcwd.c
new file mode 100644
index 0000000..4ebdb89
--- /dev/null
+++ b/libutil/agetcwd.c
_AT_@ -0,0 +1,18 @@
+/* See LICENSE file for copyright and license details. */
+#include <unistd.h>
+
+#include "../util.h"
+
+char *
+agetcwd(void)
+{
+ char *buf;
+ long size;
+
+ apathmax(&buf, &size);
+ if (!getcwd(buf, size))
+ eprintf("getcwd:");
+
+ return buf;
+}
+
diff --git a/libutil/agetline.c b/libutil/agetline.c
new file mode 100644
index 0000000..0953dac
--- /dev/null
+++ b/libutil/agetline.c
_AT_@ -0,0 +1,13 @@
+/* See LICENSE file for copyright and license details. */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "../text.h"
+#include "../util.h"
+
+ssize_t
+agetline(char **p, size_t *size, FILE *fp)
+{
+ return getline(p, size, fp);
+}
diff --git a/libutil/apathmax.c b/libutil/apathmax.c
new file mode 100644
index 0000000..c570329
--- /dev/null
+++ b/libutil/apathmax.c
_AT_@ -0,0 +1,22 @@
+/* See LICENSE file for copyright and license details. */
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include "../util.h"
+
+void
+apathmax(char **p, long *size)
+{
+ errno = 0;
+
+ if ((*size = pathconf("/", _PC_PATH_MAX)) == -1) {
+ if (errno == 0) {
+ *size = BUFSIZ;
+ } else {
+ eprintf("pathconf:");
+ }
+ }
+ *p = emalloc(*size);
+}
diff --git a/libutil/concat.c b/libutil/concat.c
new file mode 100644
index 0000000..a276fbb
--- /dev/null
+++ b/libutil/concat.c
_AT_@ -0,0 +1,20 @@
+/* See LICENSE file for copyright and license details. */
+#include <stdio.h>
+#include <unistd.h>
+
+#include "../text.h"
+#include "../util.h"
+
+void
+concat(FILE *fp1, const char *s1, FILE *fp2, const char *s2)
+{
+ char buf[BUFSIZ];
+ ssize_t n;
+
+ while ((n = read(fileno(fp1), buf, sizeof buf)) > 0) {
+ if (write(fileno(fp2), buf, n) != n)
+ eprintf("%s: write error:", s2);
+ }
+ if (n < 0)
+ eprintf("%s: read error:", s1);
+}
diff --git a/libutil/ealloc.c b/libutil/ealloc.c
new file mode 100644
index 0000000..05bdd62
--- /dev/null
+++ b/libutil/ealloc.c
_AT_@ -0,0 +1,47 @@
+/* See LICENSE file for copyright and license details. */
+#include <stdlib.h>
+#include <string.h>
+
+#include "../util.h"
+
+void *
+ecalloc(size_t nmemb, size_t size)
+{
+ void *p;
+
+ p = calloc(nmemb, size);
+ if (!p)
+ eprintf("calloc: out of memory\n");
+ return p;
+}
+
+void *
+emalloc(size_t size)
+{
+ void *p;
+
+ p = malloc(size);
+ if (!p)
+ eprintf("malloc: out of memory\n");
+ return p;
+}
+
+void *
+erealloc(void *p, size_t size)
+{
+ p = realloc(p, size);
+ if (!p)
+ eprintf("realloc: out of memory\n");
+ return p;
+}
+
+char *
+estrdup(const char *s)
+{
+ char *p;
+
+ p = strdup(s);
+ if (!p)
+ eprintf("strdup: out of memory\n");
+ return p;
+}
diff --git a/libutil/eprintf.c b/libutil/eprintf.c
new file mode 100644
index 0000000..407c502
--- /dev/null
+++ b/libutil/eprintf.c
_AT_@ -0,0 +1,67 @@
+/* See LICENSE file for copyright and license details. */
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "../util.h"
+
+char *argv0;
+
+static void venprintf(int, const char *, va_list);
+
+void
+eprintf(const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ venprintf(1, fmt, ap);
+ va_end(ap);
+}
+
+void
+enprintf(int status, const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ venprintf(status, fmt, ap);
+ va_end(ap);
+}
+
+void
+venprintf(int status, const char *fmt, va_list ap)
+{
+#ifdef DEBUG
+ fprintf(stderr, "%s: ", argv0);
+#endif
+
+ vfprintf(stderr, fmt, ap);
+
+ if (fmt[0] && fmt[strlen(fmt)-1] == ':') {
+ fputc(' ', stderr);
+ perror(NULL);
+ }
+
+ exit(status);
+}
+
+void
+weprintf(const char *fmt, ...)
+{
+ va_list ap;
+
+#ifdef DEBUG
+ fprintf(stderr, "%s: ", argv0);
+#endif
+
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+
+ if (fmt[0] && fmt[strlen(fmt)-1] == ':') {
+ fputc(' ', stderr);
+ perror(NULL);
+ }
+}
diff --git a/libutil/estrtol.c b/libutil/estrtol.c
new file mode 100644
index 0000000..74c7fb4
--- /dev/null
+++ b/libutil/estrtol.c
_AT_@ -0,0 +1,27 @@
+/* See LICENSE file for copyright and license details. */
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "../util.h"
+
+long
+estrtol(const char *s, int base)
+{
+ char *end;
+ long n;
+
+ errno = 0;
+ n = strtol(s, &end, base);
+ if (*end != '\0') {
+ if (base == 0)
+ eprintf("%s: not an integer\n", s);
+ else
+ eprintf("%s: not a base %d integer\n", s, base);
+ }
+ if (errno != 0)
+ eprintf("%s:", s);
+
+ return n;
+}
+
diff --git a/libutil/estrtoul.c b/libutil/estrtoul.c
new file mode 100644
index 0000000..b8907be
--- /dev/null
+++ b/libutil/estrtoul.c
_AT_@ -0,0 +1,26 @@
+/* See LICENSE file for copyright and license details. */
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "../util.h"
+
+unsigned long
+estrtoul(const char *s, int base)
+{
+ char *end;
+ unsigned long n;
+
+ errno = 0;
+ n = strtoul(s, &end, base);
+ if (*end != '\0') {
+ if (base == 0)
+ eprintf("%s: not an integer\n", s);
+ else
+ eprintf("%s: not a base %d integer\n", s, base);
+ }
+ if (errno != 0)
+ eprintf("%s:", s);
+
+ return n;
+}
diff --git a/libutil/explicit_bzero.c b/libutil/explicit_bzero.c
new file mode 100644
index 0000000..0217bad
--- /dev/null
+++ b/libutil/explicit_bzero.c
_AT_@ -0,0 +1,12 @@
+/* See LICENSE file for copyright and license details. */
+#include <string.h>
+
+#include "../util.h"
+
+static void *(*volatile explicit_memset)(void *, int, size_t) = memset;
+
+void
+explicit_bzero(void *b, size_t len)
+{
+ (*explicit_memset)(b, 0, len);
+}
diff --git a/libutil/passwd.c b/libutil/passwd.c
new file mode 100644
index 0000000..0798225
--- /dev/null
+++ b/libutil/passwd.c
_AT_@ -0,0 +1,77 @@
+/* See LICENSE file for copyright and license details. */
+#include <sys/resource.h>
+#include <sys/time.h>
+
+#include <errno.h>
+#include <pwd.h>
+#include <shadow.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "../passwd.h"
+#include "../text.h"
+#include "../util.h"
+
+/* Returns -1 on error, 0 for incorrect password
+ * and 1 if all went OK */
+int
+pw_check(const struct passwd *pw, const char *pass)
+{
+ char *cryptpass, *p;
+ struct spwd *spw;
+
+ p = pw->pw_passwd;
+ if (p[0] == '!' || p[0] == '*') {
+ weprintf("denied\n");
+ return -1;
+ }
+
+ if (pw->pw_passwd[0] == '\0') {
+ if (pass[0] == '\0')
+ return 1;
+ weprintf("incorrect password\n");
+ return 0;
+ }
+
+ if (pw->pw_passwd[0] == 'x' && pw->pw_passwd[1] == '\0') {
+ errno = 0;
+ spw = getspnam(pw->pw_name);
+ if (!spw) {
+ if (errno)
+ weprintf("getspnam: %s:", pw->pw_name);
+ else
+ weprintf("who are you?\n");
+ return -1;
+ }
+ p = spw->sp_pwdp;
+ if (p[0] == '!' || p[0] == '*') {
+ weprintf("denied\n");
+ return -1;
+ }
+ }
+
+ cryptpass = crypt(pass, p);
+ if (!cryptpass) {
+ weprintf("crypt:");
+ return -1;
+ }
+ if (strcmp(cryptpass, p) != 0) {
+ weprintf("incorrect password\n");
+ return 0;
+ }
+ return 1;
+}
+
+int
+pw_init(void)
+{
+ struct rlimit rlim;
+
+ rlim.rlim_cur = 0;
+ rlim.rlim_max = 0;
+ if (setrlimit(RLIMIT_CORE, &rlim) < 0)
+ eprintf("setrlimit:");
+ return 0;
+}
diff --git a/libutil/proc.c b/libutil/proc.c
new file mode 100644
index 0000000..9c4b503
--- /dev/null
+++ b/libutil/proc.c
_AT_@ -0,0 +1,117 @@
+/* See LICENSE file for copyright and license details. */
+#include <sys/stat.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "../proc.h"
+#include "../util.h"
+
+int
+parsecmdline(pid_t pid, char *buf, size_t siz)
+{
+ int fd;
+ char path[PATH_MAX];
+ ssize_t n, i;
+
+ snprintf(path, sizeof(path), "/proc/%ld/cmdline", (long)pid);
+ fd = open(path, O_RDONLY);
+ if (fd < 0)
+ return -1;
+ n = read(fd, buf, siz > 0 ? siz - 1 : 0);
+ if (n < 0) {
+ weprintf("read %s:", path);
+ close(fd);
+ return -1;
+ }
+ if (!n) {
+ close(fd);
+ return -1;
+ }
+ buf[n] = '\0';
+ for (i = 0; i < n; i++)
+ if (buf[i] == '\0')
+ buf[i] = ' ';
+ close(fd);
+ return 0;
+}
+
+int
+parsestat(pid_t pid, struct procstat *ps)
+{
+ char path[PATH_MAX];
+ FILE *fp;
+ size_t len;
+
+ snprintf(path, sizeof(path), "/proc/%d/stat", pid);
+ if (!(fp = fopen(path, "r")))
+ return -1;
+ fscanf(fp, "%d %s %c %d %d %d %d %d %u %lu %lu %lu %lu %lu %lu",
+ &ps->pid, ps->comm,
+ &ps->state, &ps->ppid, &ps->pgrp,
+ &ps->sid, &ps->tty_nr, &ps->tpgid, &ps->flags,
+ &ps->minflt, &ps->cminflt, &ps->majflt, &ps->cmajflt,
+ &ps->utime, &ps->stime);
+ fscanf(fp, "%ld %ld %ld %ld %ld %ld %llu %lu %ld %ld",
+ &ps->cutime, &ps->cstime, &ps->priority, &ps->nice,
+ &ps->num_threads, &ps->itrealvalue, &ps->starttime,
+ &ps->vsize, &ps->rss, &ps->rsslim);
+ /* Filter out '(' and ')' from comm */
+ if ((len = strlen(ps->comm)) > 0)
+ len--;
+ ps->comm[len] = '\0';
+ memmove(ps->comm, ps->comm + 1, len);
+ fclose(fp);
+ return 0;
+}
+
+int
+parsestatus(pid_t pid, struct procstatus *pstatus)
+{
+ char path[PATH_MAX];
+ char buf[BUFSIZ], *off;
+ int fd;
+ ssize_t n;
+
+ snprintf(path, sizeof(path), "/proc/%d/status", pid);
+ fd = open(path, O_RDONLY);
+ if (fd < 0)
+ return -1;
+ n = read(fd, buf, sizeof(buf) - 1);
+ if (n < 0)
+ eprintf("%s: read error:", path);
+ if (!n) {
+ close(fd);
+ return -1;
+ }
+ buf[n] = '\0';
+ close(fd);
+ off = strstr(buf, "Uid:");
+ if (!off)
+ return -1;
+ sscanf(off, "Uid: %u %u", &pstatus->uid, &pstatus->euid);
+ off = strstr(buf, "Gid:");
+ if (!off)
+ return -1;
+ sscanf(off, "Gid: %u %u", &pstatus->gid, &pstatus->egid);
+ return 0;
+}
+
+int
+pidfile(const char *file)
+{
+ char *end;
+
+ errno = 0;
+ strtol(file, &end, 10);
+ if (*end != '\0')
+ return 0;
+ if (errno != 0)
+ return 0;
+ return 1;
+}
diff --git a/libutil/putword.c b/libutil/putword.c
new file mode 100644
index 0000000..c460703
--- /dev/null
+++ b/libutil/putword.c
_AT_@ -0,0 +1,16 @@
+/* See LICENSE file for copyright and license details. */
+#include <stdio.h>
+
+#include "../util.h"
+
+void
+putword(const char *s)
+{
+ static int first = 1;
+
+ if (!first)
+ putchar(' ');
+
+ fputs(s, stdout);
+ first = 0;
+}
diff --git a/libutil/recurse.c b/libutil/recurse.c
new file mode 100644
index 0000000..318987d
--- /dev/null
+++ b/libutil/recurse.c
_AT_@ -0,0 +1,42 @@
+/* See LICENSE file for copyright and license details. */
+#include <dirent.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include "../util.h"
+
+void
+recurse(const char *path, void (*fn)(const char *))
+{
+ char buf[PATH_MAX];
+ struct dirent *d;
+ struct stat st;
+ DIR *dp;
+
+ if (lstat(path, &st) == -1 || S_ISDIR(st.st_mode) == 0)
+ return;
+
+ if (!(dp = opendir(path)))
+ eprintf("opendir %s:", path);
+
+ while ((d = readdir(dp))) {
+ if (strcmp(d->d_name, ".") == 0 ||
+ strcmp(d->d_name, "..") == 0)
+ continue;
+ if (strlcpy(buf, path, sizeof(buf)) >= sizeof(buf))
+ eprintf("path too long\n");
+ if (buf[strlen(buf) - 1] != '/')
+ if (strlcat(buf, "/", sizeof(buf)) >= sizeof(buf))
+ eprintf("path too long\n");
+ if (strlcat(buf, d->d_name, sizeof(buf)) >= sizeof(buf))
+ eprintf("path too long\n");
+ fn(buf);
+ }
+
+ closedir(dp);
+}
diff --git a/libutil/strlcat.c b/libutil/strlcat.c
new file mode 100644
index 0000000..9e2d251
--- /dev/null
+++ b/libutil/strlcat.c
_AT_@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 1998 Todd C. Miller <Todd.Miller_AT_courtesan.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <string.h>
+#include <sys/types.h>
+
+#include "../util.h"
+
+/*
+ * Appends src to string dst of size siz (unlike strncat, siz is the
+ * full size of dst, not space left). At most siz-1 characters
+ * will be copied. Always NUL terminates (unless siz <= strlen(dst)).
+ * Returns strlen(src) + MIN(siz, strlen(initial dst)).
+ * If retval >= siz, truncation occurred.
+ */
+size_t
+strlcat(char *dst, const char *src, size_t siz)
+{
+ char *d = dst;
+ const char *s = src;
+ size_t n = siz;
+ size_t dlen;
+ /* Find the end of dst and adjust bytes left but don't go past end */
+ while (n-- != 0 && *d != '\0')
+ d++;
+ dlen = d - dst;
+ n = siz - dlen;
+ if (n == 0)
+ return(dlen + strlen(s));
+ while (*s != '\0') {
+ if (n != 1) {
+ *d++ = *s;
+ n--;
+ }
+ s++;
+ }
+ *d = '\0';
+ return(dlen + (s - src)); /* count does not include NUL */
+}
diff --git a/libutil/strlcpy.c b/libutil/strlcpy.c
new file mode 100644
index 0000000..388b426
--- /dev/null
+++ b/libutil/strlcpy.c
_AT_@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 1998 Todd C. Miller <Todd.Miller_AT_courtesan.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <string.h>
+#include <sys/types.h>
+
+#include "../util.h"
+
+/*
+ * Copy src to string dst of size siz. At most siz-1 characters
+ * will be copied. Always NUL terminates (unless siz == 0).
+ * Returns strlen(src); if retval >= siz, truncation occurred.
+ */
+size_t
+strlcpy(char *dst, const char *src, size_t siz)
+{
+ char *d = dst;
+ const char *s = src;
+ size_t n = siz;
+ /* Copy as many bytes as will fit */
+ if (n != 0) {
+ while (--n != 0) {
+ if ((*d++ = *s++) == '\0')
+ break;
+ }
+ }
+ /* Not enough room in dst, add NUL and traverse rest of src */
+ if (n == 0) {
+ if (siz != 0)
+ *d = '\0'; /* NUL-terminate dst */
+ while (*s++)
+ ;
+ }
+ return(s - src - 1); /* count does not include NUL */
+}
diff --git a/libutil/tty.c b/libutil/tty.c
new file mode 100644
index 0000000..4bd24c0
--- /dev/null
+++ b/libutil/tty.c
_AT_@ -0,0 +1,39 @@
+/* See LICENSE file for copyright and license details. */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "../util.h"
+
+void
+devtotty(int dev, int *tty_maj, int *tty_min)
+{
+ *tty_maj = (dev >> 8) & 0xfff;
+ *tty_min = (dev & 0xff) | ((dev >> 12) & 0xfff00);
+}
+
+char *
+ttytostr(int tty_maj, int tty_min)
+{
+ const char *pts = "pts/";
+ const char *tty = "tty";
+ char *ttystr;
+ size_t len;
+
+ /* Up to 10k ttys */
+ len = strlen(pts) + 4 + 1;
+ ttystr = emalloc(len);
+ switch (tty_maj) {
+ case 136:
+ snprintf(ttystr, len, "%s%d", pts, tty_min);
+ break;
+ case 4:
+ snprintf(ttystr, len, "%s%d", tty, tty_min);
+ break;
+ default:
+ ttystr[0] = '?';
+ ttystr[1] = '\0';
+ break;
+ }
+ return ttystr;
+}
diff --git a/util/agetcwd.c b/util/agetcwd.c
deleted file mode 100644
index 4ebdb89..0000000
--- a/util/agetcwd.c
+++ /dev/null
_AT_@ -1,18 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include <unistd.h>
-
-#include "../util.h"
-
-char *
-agetcwd(void)
-{
- char *buf;
- long size;
-
- apathmax(&buf, &size);
- if (!getcwd(buf, size))
- eprintf("getcwd:");
-
- return buf;
-}
-
diff --git a/util/agetline.c b/util/agetline.c
deleted file mode 100644
index 0953dac..0000000
--- a/util/agetline.c
+++ /dev/null
_AT_@ -1,13 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "../text.h"
-#include "../util.h"
-
-ssize_t
-agetline(char **p, size_t *size, FILE *fp)
-{
- return getline(p, size, fp);
-}
diff --git a/util/apathmax.c b/util/apathmax.c
deleted file mode 100644
index c570329..0000000
--- a/util/apathmax.c
+++ /dev/null
_AT_@ -1,22 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include "../util.h"
-
-void
-apathmax(char **p, long *size)
-{
- errno = 0;
-
- if ((*size = pathconf("/", _PC_PATH_MAX)) == -1) {
- if (errno == 0) {
- *size = BUFSIZ;
- } else {
- eprintf("pathconf:");
- }
- }
- *p = emalloc(*size);
-}
diff --git a/util/concat.c b/util/concat.c
deleted file mode 100644
index a276fbb..0000000
--- a/util/concat.c
+++ /dev/null
_AT_@ -1,20 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include <stdio.h>
-#include <unistd.h>
-
-#include "../text.h"
-#include "../util.h"
-
-void
-concat(FILE *fp1, const char *s1, FILE *fp2, const char *s2)
-{
- char buf[BUFSIZ];
- ssize_t n;
-
- while ((n = read(fileno(fp1), buf, sizeof buf)) > 0) {
- if (write(fileno(fp2), buf, n) != n)
- eprintf("%s: write error:", s2);
- }
- if (n < 0)
- eprintf("%s: read error:", s1);
-}
diff --git a/util/ealloc.c b/util/ealloc.c
deleted file mode 100644
index 05bdd62..0000000
--- a/util/ealloc.c
+++ /dev/null
_AT_@ -1,47 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include <stdlib.h>
-#include <string.h>
-
-#include "../util.h"
-
-void *
-ecalloc(size_t nmemb, size_t size)
-{
- void *p;
-
- p = calloc(nmemb, size);
- if (!p)
- eprintf("calloc: out of memory\n");
- return p;
-}
-
-void *
-emalloc(size_t size)
-{
- void *p;
-
- p = malloc(size);
- if (!p)
- eprintf("malloc: out of memory\n");
- return p;
-}
-
-void *
-erealloc(void *p, size_t size)
-{
- p = realloc(p, size);
- if (!p)
- eprintf("realloc: out of memory\n");
- return p;
-}
-
-char *
-estrdup(const char *s)
-{
- char *p;
-
- p = strdup(s);
- if (!p)
- eprintf("strdup: out of memory\n");
- return p;
-}
diff --git a/util/eprintf.c b/util/eprintf.c
deleted file mode 100644
index 407c502..0000000
--- a/util/eprintf.c
+++ /dev/null
_AT_@ -1,67 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "../util.h"
-
-char *argv0;
-
-static void venprintf(int, const char *, va_list);
-
-void
-eprintf(const char *fmt, ...)
-{
- va_list ap;
-
- va_start(ap, fmt);
- venprintf(1, fmt, ap);
- va_end(ap);
-}
-
-void
-enprintf(int status, const char *fmt, ...)
-{
- va_list ap;
-
- va_start(ap, fmt);
- venprintf(status, fmt, ap);
- va_end(ap);
-}
-
-void
-venprintf(int status, const char *fmt, va_list ap)
-{
-#ifdef DEBUG
- fprintf(stderr, "%s: ", argv0);
-#endif
-
- vfprintf(stderr, fmt, ap);
-
- if (fmt[0] && fmt[strlen(fmt)-1] == ':') {
- fputc(' ', stderr);
- perror(NULL);
- }
-
- exit(status);
-}
-
-void
-weprintf(const char *fmt, ...)
-{
- va_list ap;
-
-#ifdef DEBUG
- fprintf(stderr, "%s: ", argv0);
-#endif
-
- va_start(ap, fmt);
- vfprintf(stderr, fmt, ap);
- va_end(ap);
-
- if (fmt[0] && fmt[strlen(fmt)-1] == ':') {
- fputc(' ', stderr);
- perror(NULL);
- }
-}
diff --git a/util/estrtol.c b/util/estrtol.c
deleted file mode 100644
index 74c7fb4..0000000
--- a/util/estrtol.c
+++ /dev/null
_AT_@ -1,27 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "../util.h"
-
-long
-estrtol(const char *s, int base)
-{
- char *end;
- long n;
-
- errno = 0;
- n = strtol(s, &end, base);
- if (*end != '\0') {
- if (base == 0)
- eprintf("%s: not an integer\n", s);
- else
- eprintf("%s: not a base %d integer\n", s, base);
- }
- if (errno != 0)
- eprintf("%s:", s);
-
- return n;
-}
-
diff --git a/util/estrtoul.c b/util/estrtoul.c
deleted file mode 100644
index b8907be..0000000
--- a/util/estrtoul.c
+++ /dev/null
_AT_@ -1,26 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "../util.h"
-
-unsigned long
-estrtoul(const char *s, int base)
-{
- char *end;
- unsigned long n;
-
- errno = 0;
- n = strtoul(s, &end, base);
- if (*end != '\0') {
- if (base == 0)
- eprintf("%s: not an integer\n", s);
- else
- eprintf("%s: not a base %d integer\n", s, base);
- }
- if (errno != 0)
- eprintf("%s:", s);
-
- return n;
-}
diff --git a/util/explicit_bzero.c b/util/explicit_bzero.c
deleted file mode 100644
index 0217bad..0000000
--- a/util/explicit_bzero.c
+++ /dev/null
_AT_@ -1,12 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include <string.h>
-
-#include "../util.h"
-
-static void *(*volatile explicit_memset)(void *, int, size_t) = memset;
-
-void
-explicit_bzero(void *b, size_t len)
-{
- (*explicit_memset)(b, 0, len);
-}
diff --git a/util/passwd.c b/util/passwd.c
deleted file mode 100644
index 0798225..0000000
--- a/util/passwd.c
+++ /dev/null
_AT_@ -1,77 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include <sys/resource.h>
-#include <sys/time.h>
-
-#include <errno.h>
-#include <pwd.h>
-#include <shadow.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "../passwd.h"
-#include "../text.h"
-#include "../util.h"
-
-/* Returns -1 on error, 0 for incorrect password
- * and 1 if all went OK */
-int
-pw_check(const struct passwd *pw, const char *pass)
-{
- char *cryptpass, *p;
- struct spwd *spw;
-
- p = pw->pw_passwd;
- if (p[0] == '!' || p[0] == '*') {
- weprintf("denied\n");
- return -1;
- }
-
- if (pw->pw_passwd[0] == '\0') {
- if (pass[0] == '\0')
- return 1;
- weprintf("incorrect password\n");
- return 0;
- }
-
- if (pw->pw_passwd[0] == 'x' && pw->pw_passwd[1] == '\0') {
- errno = 0;
- spw = getspnam(pw->pw_name);
- if (!spw) {
- if (errno)
- weprintf("getspnam: %s:", pw->pw_name);
- else
- weprintf("who are you?\n");
- return -1;
- }
- p = spw->sp_pwdp;
- if (p[0] == '!' || p[0] == '*') {
- weprintf("denied\n");
- return -1;
- }
- }
-
- cryptpass = crypt(pass, p);
- if (!cryptpass) {
- weprintf("crypt:");
- return -1;
- }
- if (strcmp(cryptpass, p) != 0) {
- weprintf("incorrect password\n");
- return 0;
- }
- return 1;
-}
-
-int
-pw_init(void)
-{
- struct rlimit rlim;
-
- rlim.rlim_cur = 0;
- rlim.rlim_max = 0;
- if (setrlimit(RLIMIT_CORE, &rlim) < 0)
- eprintf("setrlimit:");
- return 0;
-}
diff --git a/util/proc.c b/util/proc.c
deleted file mode 100644
index 9c4b503..0000000
--- a/util/proc.c
+++ /dev/null
_AT_@ -1,117 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include <sys/stat.h>
-
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "../proc.h"
-#include "../util.h"
-
-int
-parsecmdline(pid_t pid, char *buf, size_t siz)
-{
- int fd;
- char path[PATH_MAX];
- ssize_t n, i;
-
- snprintf(path, sizeof(path), "/proc/%ld/cmdline", (long)pid);
- fd = open(path, O_RDONLY);
- if (fd < 0)
- return -1;
- n = read(fd, buf, siz > 0 ? siz - 1 : 0);
- if (n < 0) {
- weprintf("read %s:", path);
- close(fd);
- return -1;
- }
- if (!n) {
- close(fd);
- return -1;
- }
- buf[n] = '\0';
- for (i = 0; i < n; i++)
- if (buf[i] == '\0')
- buf[i] = ' ';
- close(fd);
- return 0;
-}
-
-int
-parsestat(pid_t pid, struct procstat *ps)
-{
- char path[PATH_MAX];
- FILE *fp;
- size_t len;
-
- snprintf(path, sizeof(path), "/proc/%d/stat", pid);
- if (!(fp = fopen(path, "r")))
- return -1;
- fscanf(fp, "%d %s %c %d %d %d %d %d %u %lu %lu %lu %lu %lu %lu",
- &ps->pid, ps->comm,
- &ps->state, &ps->ppid, &ps->pgrp,
- &ps->sid, &ps->tty_nr, &ps->tpgid, &ps->flags,
- &ps->minflt, &ps->cminflt, &ps->majflt, &ps->cmajflt,
- &ps->utime, &ps->stime);
- fscanf(fp, "%ld %ld %ld %ld %ld %ld %llu %lu %ld %ld",
- &ps->cutime, &ps->cstime, &ps->priority, &ps->nice,
- &ps->num_threads, &ps->itrealvalue, &ps->starttime,
- &ps->vsize, &ps->rss, &ps->rsslim);
- /* Filter out '(' and ')' from comm */
- if ((len = strlen(ps->comm)) > 0)
- len--;
- ps->comm[len] = '\0';
- memmove(ps->comm, ps->comm + 1, len);
- fclose(fp);
- return 0;
-}
-
-int
-parsestatus(pid_t pid, struct procstatus *pstatus)
-{
- char path[PATH_MAX];
- char buf[BUFSIZ], *off;
- int fd;
- ssize_t n;
-
- snprintf(path, sizeof(path), "/proc/%d/status", pid);
- fd = open(path, O_RDONLY);
- if (fd < 0)
- return -1;
- n = read(fd, buf, sizeof(buf) - 1);
- if (n < 0)
- eprintf("%s: read error:", path);
- if (!n) {
- close(fd);
- return -1;
- }
- buf[n] = '\0';
- close(fd);
- off = strstr(buf, "Uid:");
- if (!off)
- return -1;
- sscanf(off, "Uid: %u %u", &pstatus->uid, &pstatus->euid);
- off = strstr(buf, "Gid:");
- if (!off)
- return -1;
- sscanf(off, "Gid: %u %u", &pstatus->gid, &pstatus->egid);
- return 0;
-}
-
-int
-pidfile(const char *file)
-{
- char *end;
-
- errno = 0;
- strtol(file, &end, 10);
- if (*end != '\0')
- return 0;
- if (errno != 0)
- return 0;
- return 1;
-}
diff --git a/util/putword.c b/util/putword.c
deleted file mode 100644
index c460703..0000000
--- a/util/putword.c
+++ /dev/null
_AT_@ -1,16 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include <stdio.h>
-
-#include "../util.h"
-
-void
-putword(const char *s)
-{
- static int first = 1;
-
- if (!first)
- putchar(' ');
-
- fputs(s, stdout);
- first = 0;
-}
diff --git a/util/recurse.c b/util/recurse.c
deleted file mode 100644
index 318987d..0000000
--- a/util/recurse.c
+++ /dev/null
_AT_@ -1,42 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include <dirent.h>
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#include "../util.h"
-
-void
-recurse(const char *path, void (*fn)(const char *))
-{
- char buf[PATH_MAX];
- struct dirent *d;
- struct stat st;
- DIR *dp;
-
- if (lstat(path, &st) == -1 || S_ISDIR(st.st_mode) == 0)
- return;
-
- if (!(dp = opendir(path)))
- eprintf("opendir %s:", path);
-
- while ((d = readdir(dp))) {
- if (strcmp(d->d_name, ".") == 0 ||
- strcmp(d->d_name, "..") == 0)
- continue;
- if (strlcpy(buf, path, sizeof(buf)) >= sizeof(buf))
- eprintf("path too long\n");
- if (buf[strlen(buf) - 1] != '/')
- if (strlcat(buf, "/", sizeof(buf)) >= sizeof(buf))
- eprintf("path too long\n");
- if (strlcat(buf, d->d_name, sizeof(buf)) >= sizeof(buf))
- eprintf("path too long\n");
- fn(buf);
- }
-
- closedir(dp);
-}
diff --git a/util/strlcat.c b/util/strlcat.c
deleted file mode 100644
index 9e2d251..0000000
--- a/util/strlcat.c
+++ /dev/null
_AT_@ -1,52 +0,0 @@
-/*
- * Copyright (c) 1998 Todd C. Miller <Todd.Miller_AT_courtesan.com>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <string.h>
-#include <sys/types.h>
-
-#include "../util.h"
-
-/*
- * Appends src to string dst of size siz (unlike strncat, siz is the
- * full size of dst, not space left). At most siz-1 characters
- * will be copied. Always NUL terminates (unless siz <= strlen(dst)).
- * Returns strlen(src) + MIN(siz, strlen(initial dst)).
- * If retval >= siz, truncation occurred.
- */
-size_t
-strlcat(char *dst, const char *src, size_t siz)
-{
- char *d = dst;
- const char *s = src;
- size_t n = siz;
- size_t dlen;
- /* Find the end of dst and adjust bytes left but don't go past end */
- while (n-- != 0 && *d != '\0')
- d++;
- dlen = d - dst;
- n = siz - dlen;
- if (n == 0)
- return(dlen + strlen(s));
- while (*s != '\0') {
- if (n != 1) {
- *d++ = *s;
- n--;
- }
- s++;
- }
- *d = '\0';
- return(dlen + (s - src)); /* count does not include NUL */
-}
diff --git a/util/strlcpy.c b/util/strlcpy.c
deleted file mode 100644
index 388b426..0000000
--- a/util/strlcpy.c
+++ /dev/null
_AT_@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1998 Todd C. Miller <Todd.Miller_AT_courtesan.com>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <string.h>
-#include <sys/types.h>
-
-#include "../util.h"
-
-/*
- * Copy src to string dst of size siz. At most siz-1 characters
- * will be copied. Always NUL terminates (unless siz == 0).
- * Returns strlen(src); if retval >= siz, truncation occurred.
- */
-size_t
-strlcpy(char *dst, const char *src, size_t siz)
-{
- char *d = dst;
- const char *s = src;
- size_t n = siz;
- /* Copy as many bytes as will fit */
- if (n != 0) {
- while (--n != 0) {
- if ((*d++ = *s++) == '\0')
- break;
- }
- }
- /* Not enough room in dst, add NUL and traverse rest of src */
- if (n == 0) {
- if (siz != 0)
- *d = '\0'; /* NUL-terminate dst */
- while (*s++)
- ;
- }
- return(s - src - 1); /* count does not include NUL */
-}
diff --git a/util/tty.c b/util/tty.c
deleted file mode 100644
index 4bd24c0..0000000
--- a/util/tty.c
+++ /dev/null
_AT_@ -1,39 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "../util.h"
-
-void
-devtotty(int dev, int *tty_maj, int *tty_min)
-{
- *tty_maj = (dev >> 8) & 0xfff;
- *tty_min = (dev & 0xff) | ((dev >> 12) & 0xfff00);
-}
-
-char *
-ttytostr(int tty_maj, int tty_min)
-{
- const char *pts = "pts/";
- const char *tty = "tty";
- char *ttystr;
- size_t len;
-
- /* Up to 10k ttys */
- len = strlen(pts) + 4 + 1;
- ttystr = emalloc(len);
- switch (tty_maj) {
- case 136:
- snprintf(ttystr, len, "%s%d", pts, tty_min);
- break;
- case 4:
- snprintf(ttystr, len, "%s%d", tty, tty_min);
- break;
- default:
- ttystr[0] = '?';
- ttystr[1] = '\0';
- break;
- }
- return ttystr;
-}
Received on Sat Nov 29 2014 - 22:46:52 CET

This archive was generated by hypermail 2.3.0 : Sat Nov 29 2014 - 22:48:09 CET