- char *p_concat;
- size_t base_len;
- size_t dir_len;
-
- if (!dir)
- {
- p_concat = strdup (base);
- if (base_in_result)
- *base_in_result = p_concat;
- return p_concat;
- }
-
- /* DIR is not empty. */
- base_len = strlen (base);
- dir_len = strlen (dir);
-
- p_concat = malloc (dir_len + base_len + 2);
- if (!p_concat)
- return 0;
-
- p = mempcpy (p_concat, dir, dir_len);
-
- if (dir_len > FILESYSTEM_PREFIX_LEN (dir))
- {
- if (ISSLASH (*(p - 1)) && ISSLASH (*base))
- --p;
- else if (!ISSLASH (*(p - 1)) && !ISSLASH (*base))
- *p++ = DIRECTORY_SEPARATOR;
- }
+
+ p = mempcpy (p_concat, dir, dirlen);
+ *p = DIRECTORY_SEPARATOR;
+ p += needs_separator;