#ifndef __PATH_H struct path { char **components; // Array of path components int32_t count; // Number of components int32_t capacity; // Allocated capacity int32_t is_absolute; // Whether path starts with / }; // Creation/Destruction struct path path_from_string(const char *s); struct path path_new(void); void path_free(struct path *p); // Manipulation int32_t path_join(struct path *p, const char *component); int32_t path_resolve(struct path *p); // Handle .. and . struct path path_parent(const struct path *p); const char * path_basename(const struct path *p); // Output int32_t path_to_string(const struct path *p, char *buffer, size_t size); // Utilities int32_t path_is_absolute(const struct path *p); int32_t path_starts_with(const struct path *p, const struct path *prefix); struct path path_copy(const struct path *src); #endif