summaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c26
1 files changed, 12 insertions, 14 deletions
diff --git a/src/main.c b/src/main.c
index e329e4e..177187f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -358,8 +358,8 @@ void check_options (void)
if (!path) {
m4 = M4;
} else {
+ int m4_length = strlen(m4);
do {
- char m4_path[PATH_MAX];
int length = strlen(path);
struct stat sbuf;
@@ -367,19 +367,17 @@ void check_options (void)
if (!endOfDir)
endOfDir = path+length;
- if ((endOfDir-path+2) >= sizeof(m4_path)) {
- path = endOfDir+1;
- continue;
- }
-
- strncpy(m4_path, path, sizeof(m4_path));
- m4_path[endOfDir-path] = '/';
- m4_path[endOfDir-path+1] = '\0';
- strncat(m4_path, m4, sizeof(m4_path));
- if (stat(m4_path, &sbuf) == 0 &&
- (S_ISREG(sbuf.st_mode)) && sbuf.st_mode & S_IXUSR) {
- m4 = strdup(m4_path);
- break;
+ {
+ char m4_path[endOfDir-path + 1 + m4_length + 1];
+
+ memcpy(m4_path, path, endOfDir-path);
+ m4_path[endOfDir-path] = '/';
+ memcpy(m4_path + (endOfDir-path) + 1, m4, m4_length + 1);
+ if (stat(m4_path, &sbuf) == 0 &&
+ (S_ISREG(sbuf.st_mode)) && sbuf.st_mode & S_IXUSR) {
+ m4 = strdup(m4_path);
+ break;
+ }
}
path = endOfDir+1;
} while (path[0]);