__pakfire_path_join(dest, sizeof(dest), first, second)
int __pakfire_path_join(char* dest, const size_t length,
const char* first, const char* second);
+const char* pakfire_path_abspath(const char* path);
const char* pakfire_path_relpath(const char* root, const char* path);
// File stuff
return __pakfire_string_format(dest, length, "%s/%s", first, second);
}
+const char* pakfire_path_abspath(const char* path) {
+ static char buffer[PATH_MAX];
+ int r;
+
+ // Check input
+ if (!path) {
+ errno = EINVAL;
+ return NULL;
+ }
+
+ // Return path if already absolute
+ if (*path == '/')
+ return path;
+
+ // Otherwise prepend a /
+ r = pakfire_string_format(buffer, "/%s", path);
+ if (r)
+ return NULL;
+
+ // Return a reference to the buffer
+ return buffer;
+}
+
const char* pakfire_path_relpath(const char* root, const char* path) {
if (pakfire_string_startswith(path, root))
return path + strlen(root);