[hackers] [sbase] Fix off-by-one in apathmax() as the path is relative to "/" || sin

From: <git_AT_suckless.org>
Date: Sat, 7 Mar 2015 01:12:20 +0100 (CET)

commit 3ec7f4fb3b73064ffce8302ea5f49743851fae69
Author: sin <sin_AT_2f30.org>
Date: Fri Mar 6 23:48:37 2015 +0000

    Fix off-by-one in apathmax() as the path is relative to "/"
    
    1) Use size_t * instead of long *
    2) Fallback to PATH_MAX instead of BUFSIZ
    3) Header cleanup

diff --git a/libutil/agetcwd.c b/libutil/agetcwd.c
index 4ebdb89..e61673c 100644
--- a/libutil/agetcwd.c
+++ b/libutil/agetcwd.c
_AT_@ -7,7 +7,7 @@ char *
 agetcwd(void)
 {
         char *buf;
- long size;
+ size_t size;
 
         apathmax(&buf, &size);
         if (!getcwd(buf, size))
diff --git a/libutil/apathmax.c b/libutil/apathmax.c
index d2412b8..b99b31b 100644
--- a/libutil/apathmax.c
+++ b/libutil/apathmax.c
_AT_@ -1,22 +1,22 @@
 /* See LICENSE file for copyright and license details. */
 #include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
+#include <limits.h>
 #include <unistd.h>
 
 #include "../util.h"
 
 void
-apathmax(char **p, long *size)
+apathmax(char **p, size_t *size)
 {
         errno = 0;
-
         if ((*size = pathconf("/", _PC_PATH_MAX)) < 0) {
                 if (errno == 0) {
- *size = BUFSIZ;
+ *size = PATH_MAX;
                 } else {
                         eprintf("pathconf:");
                 }
+ } else {
+ (*size)++;
         }
         *p = emalloc(*size);
 }
diff --git a/libutil/cp.c b/libutil/cp.c
index e58716e..135a23f 100644
--- a/libutil/cp.c
+++ b/libutil/cp.c
_AT_@ -28,7 +28,7 @@ cp(const char *s1, const char *s2, int depth)
 {
         FILE *f1, *f2;
         char *ns1, *ns2;
- long size1, size2;
+ size_t size1, size2;
         struct dirent *d;
         struct stat st;
         struct utimbuf ut;
diff --git a/libutil/enmasse.c b/libutil/enmasse.c
index 24af279..54d02eb 100644
--- a/libutil/enmasse.c
+++ b/libutil/enmasse.c
_AT_@ -11,11 +11,10 @@
 void
 enmasse(int argc, char *argv[], int (*fn)(const char *, const char *, int))
 {
+ struct stat st;
         char *buf, *dir;
         int i, len;
- long size;
- struct stat st;
- size_t dlen;
+ size_t size, dlen;
 
         if (argc == 2 && !(stat(argv[1], &st) == 0 && S_ISDIR(st.st_mode))) {
                 fnck(argv[0], argv[1], fn, 0);
diff --git a/util.h b/util.h
index 2fec2d9..3f16731 100644
--- a/util.h
+++ b/util.h
_AT_@ -21,7 +21,7 @@
 extern char *argv0;
 
 char *agetcwd(void);
-void apathmax(char **, long *);
+void apathmax(char **, size_t *);
 
 void *ecalloc(size_t, size_t);
 void *emalloc(size_t);
Received on Sat Mar 07 2015 - 01:12:20 CET

This archive was generated by hypermail 2.3.0 : Sat Mar 07 2015 - 01:24:09 CET