}
/* The final remainder is the CRC */
- return (remainder);
-
+ return remainder;
}
/* Messages show up at the bottom */
/*
* Updates out with "dir/name or "/name"
- * Returns the number of bytes in out including the terminating NULL byte
+ * Returns the number of bytes copied including the terminating NULL byte
*/
size_t
mkpath(char *dir, char *name, char *out, size_t n)
{
+ static size_t len;
+
/* Handle absolute path */
if (name[0] == '/')
return xstrlcpy(out, name, n);
else {
/* Handle root case */
if (istopdir(dir))
- return (snprintf(out, n, "/%s", name) + 1);
+ len = 1;
else
- return (snprintf(out, n, "%s/%s", dir, name) + 1);
+ len = xstrlcpy(out, dir, n);
}
- return 0;
+ out[len - 1] = '/';
+ return (xstrlcpy(out + len, name, n - len) + len);
}
static void