diff options
-rw-r--r-- | common/path.c | 17 | ||||
-rw-r--r-- | common/path.h | 3 | ||||
-rw-r--r-- | common/tests/test-path.c | 13 |
3 files changed, 33 insertions, 0 deletions
diff --git a/common/path.c b/common/path.c index a2ba6ec..8362765 100644 --- a/common/path.c +++ b/common/path.c @@ -298,3 +298,20 @@ p11_path_parent (const char *path) return_val_if_fail (parent != NULL, NULL); return parent; } + +bool +p11_path_prefix (const char *string, + const char *prefix) +{ + int a, b; + + return_val_if_fail (string != NULL, false); + return_val_if_fail (prefix != NULL, false); + + a = strlen (string); + b = strlen (prefix); + + return a > b && + strncmp (string, prefix, b) == 0 && + is_path_component_or_null (string[b]); +} diff --git a/common/path.h b/common/path.h index 1fce607..cd135cb 100644 --- a/common/path.h +++ b/common/path.h @@ -61,4 +61,7 @@ bool p11_path_absolute (const char *path); char * p11_path_parent (const char *path); +bool p11_path_prefix (const char *string, + const char *prefix); + #endif /* P11_PATH_H__ */ diff --git a/common/tests/test-path.c b/common/tests/test-path.c index ec2c200..1671381 100644 --- a/common/tests/test-path.c +++ b/common/tests/test-path.c @@ -189,6 +189,18 @@ test_parent (void) assert_ptr_eq (NULL, p11_path_parent ("")); } +static void +test_prefix (void) +{ + assert (p11_path_prefix ("/test/second", "/test")); + assert (!p11_path_prefix ("/test", "/test")); + assert (!p11_path_prefix ("/different/prefix", "/test")); + assert (!p11_path_prefix ("/te", "/test")); + assert (!p11_path_prefix ("/test", "/test/blah")); + assert (p11_path_prefix ("/test/other/second", "/test")); + assert (p11_path_prefix ("/test//other//second", "/test")); +} + int main (int argc, char *argv[]) @@ -198,6 +210,7 @@ main (int argc, p11_test (test_expand, "/path/expand"); p11_test (test_absolute, "/path/absolute"); p11_test (test_parent, "/path/parent"); + p11_test (test_prefix, "/path/prefix"); return p11_test_run (argc, argv); } |