commit 7d36a3564957826db7a7a4aad9614780905237d2
parent 0c2f19c2100c15ebbd8d10cf985de3569530d521
Author: sin <sin@2f30.org>
Date: Fri, 6 Mar 2015 23:48:37 +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
Diffstat:
5 files changed, 10 insertions(+), 11 deletions(-)
diff --git a/libutil/agetcwd.c b/libutil/agetcwd.c
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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);