char *
 makepath(char *dir, char *name)
 {
-       char *path;
+       char path[PATH_MAX];
 
        /* Handle absolute path */
        if (name[0] == '/') {
-               path = xstrdup(name);
+               strlcpy(path, name, sizeof(path));
        } else {
-               path = xmalloc(PATH_MAX);
                /* Handle root case */
                if (strcmp(dir, "/") == 0) {
-                       strlcpy(path, "/", PATH_MAX);
-                       strlcat(path, name, PATH_MAX);
+                       strlcpy(path, "/", sizeof(path));
+                       strlcat(path, name, sizeof(path));
                } else {
-                       strlcpy(path, dir, PATH_MAX);
-                       strlcat(path, "/", PATH_MAX);
-                       strlcat(path, name, PATH_MAX);
+                       strlcpy(path, dir, sizeof(path));
+                       strlcat(path, "/", sizeof(path));
+                       strlcat(path, name, sizeof(path));
                }
        }
-       return path;
+       return xstrdup(path);
 }
 
 /* Return the position of the matching entry or 0 otherwise */