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);  } | 
