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
This commit is contained in:
		| @@ -7,7 +7,7 @@ char * | |||||||
| agetcwd(void) | agetcwd(void) | ||||||
| { | { | ||||||
| 	char *buf; | 	char *buf; | ||||||
| 	long size; | 	size_t size; | ||||||
|  |  | ||||||
| 	apathmax(&buf, &size); | 	apathmax(&buf, &size); | ||||||
| 	if (!getcwd(buf, size)) | 	if (!getcwd(buf, size)) | ||||||
|   | |||||||
| @@ -1,22 +1,22 @@ | |||||||
| /* See LICENSE file for copyright and license details. */ | /* See LICENSE file for copyright and license details. */ | ||||||
| #include <errno.h> | #include <errno.h> | ||||||
| #include <stdio.h> | #include <limits.h> | ||||||
| #include <stdlib.h> |  | ||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
|  |  | ||||||
| #include "../util.h" | #include "../util.h" | ||||||
|  |  | ||||||
| void | void | ||||||
| apathmax(char **p, long *size) | apathmax(char **p, size_t *size) | ||||||
| { | { | ||||||
| 	errno = 0; | 	errno = 0; | ||||||
|  |  | ||||||
| 	if ((*size = pathconf("/", _PC_PATH_MAX)) < 0) { | 	if ((*size = pathconf("/", _PC_PATH_MAX)) < 0) { | ||||||
| 		if (errno == 0) { | 		if (errno == 0) { | ||||||
| 			*size = BUFSIZ; | 			*size = PATH_MAX; | ||||||
| 		} else { | 		} else { | ||||||
| 			eprintf("pathconf:"); | 			eprintf("pathconf:"); | ||||||
| 		} | 		} | ||||||
|  | 	} else { | ||||||
|  | 		(*size)++; | ||||||
| 	} | 	} | ||||||
| 	*p = emalloc(*size); | 	*p = emalloc(*size); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -28,7 +28,7 @@ cp(const char *s1, const char *s2, int depth) | |||||||
| { | { | ||||||
| 	FILE *f1, *f2; | 	FILE *f1, *f2; | ||||||
| 	char *ns1, *ns2; | 	char *ns1, *ns2; | ||||||
| 	long size1, size2; | 	size_t size1, size2; | ||||||
| 	struct dirent *d; | 	struct dirent *d; | ||||||
| 	struct stat st; | 	struct stat st; | ||||||
| 	struct utimbuf ut; | 	struct utimbuf ut; | ||||||
|   | |||||||
| @@ -11,11 +11,10 @@ | |||||||
| void | void | ||||||
| enmasse(int argc, char *argv[], int (*fn)(const char *, const char *, int)) | enmasse(int argc, char *argv[], int (*fn)(const char *, const char *, int)) | ||||||
| { | { | ||||||
|  | 	struct stat st; | ||||||
| 	char *buf, *dir; | 	char *buf, *dir; | ||||||
| 	int i, len; | 	int i, len; | ||||||
| 	long size; | 	size_t size, dlen; | ||||||
| 	struct stat st; |  | ||||||
| 	size_t dlen; |  | ||||||
|  |  | ||||||
| 	if (argc == 2 && !(stat(argv[1], &st) == 0 && S_ISDIR(st.st_mode))) { | 	if (argc == 2 && !(stat(argv[1], &st) == 0 && S_ISDIR(st.st_mode))) { | ||||||
| 		fnck(argv[0], argv[1], fn, 0); | 		fnck(argv[0], argv[1], fn, 0); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user