summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/path.c16
-rw-r--r--common/tests/test-path.c46
2 files changed, 37 insertions, 25 deletions
diff --git a/common/path.c b/common/path.c
index 3f1fccc..d3d881d 100644
--- a/common/path.c
+++ b/common/path.c
@@ -97,6 +97,9 @@ expand_homedir (const char *remainder)
{
const char *env;
+ if (remainder[0] == '\0')
+ remainder = NULL;
+
env = getenv ("HOME");
if (env && env[0]) {
return p11_path_build (env, remainder, NULL);
@@ -137,6 +140,9 @@ expand_tempdir (const char *remainder)
{
const char *env;
+ if (remainder[0] == '\0')
+ remainder = NULL;
+
env = getenv ("TEMP");
if (env && env[0]) {
return p11_path_build (env, remainder, NULL);
@@ -164,10 +170,10 @@ expand_tempdir (const char *remainder)
}
}
-static bool
+static inline bool
is_path_component_or_null (char ch)
{
- return (ch == '0' || ch == '/'
+ return (ch == '\0' || ch == '/'
#ifdef OS_WIN32
|| ch == '\\'
#endif
@@ -181,15 +187,15 @@ p11_path_expand (const char *path)
if (strncmp (path, "~", 1) == 0 &&
is_path_component_or_null (path[1])) {
- return expand_homedir (path + 2);
+ return expand_homedir (path + 1);
} else if (strncmp (path, "$HOME", 5) == 0 &&
is_path_component_or_null (path[5])) {
- return expand_homedir (path + 6);
+ return expand_homedir (path + 5);
} else if (strncmp (path, "$TEMP", 5) == 0 &&
is_path_component_or_null (path[5])) {
- return expand_tempdir (path + 6);
+ return expand_tempdir (path + 5);
} else {
return strdup (path);
diff --git a/common/tests/test-path.c b/common/tests/test-path.c
index 54d6f29..f1bccbd 100644
--- a/common/tests/test-path.c
+++ b/common/tests/test-path.c
@@ -75,33 +75,33 @@ test_base (void)
}
}
-#define check_equals_and_free(tc, ex, ac) \
+#define check_equals_and_free(ex, ac) \
do { assert_str_eq (ex, ac); free (ac); } while (0)
static void
test_build (void)
{
#ifdef OS_UNIX
- check_equals_and_free (tc, "/root/second",
+ check_equals_and_free ("/root/second",
p11_path_build ("/root", "second", NULL));
- check_equals_and_free (tc, "/root/second",
+ check_equals_and_free ("/root/second",
p11_path_build ("/root", "/second", NULL));
- check_equals_and_free (tc, "/root/second",
+ check_equals_and_free ("/root/second",
p11_path_build ("/root/", "second", NULL));
- check_equals_and_free (tc, "/root/second/third",
+ check_equals_and_free ("/root/second/third",
p11_path_build ("/root", "second", "third", NULL));
- check_equals_and_free (tc, "/root/second/third",
+ check_equals_and_free ("/root/second/third",
p11_path_build ("/root", "/second/third", NULL));
#else /* OS_WIN32 */
- check_equals_and_free (tc, "C:\\root\\second",
+ check_equals_and_free ("C:\\root\\second",
p11_path_build ("C:\\root", "second", NULL));
- check_equals_and_free (tc, "C:\\root\\second",
+ check_equals_and_free ("C:\\root\\second",
p11_path_build ("C:\\root", "\\second", NULL));
- check_equals_and_free (tc, "C:\\root\\second",
+ check_equals_and_free ("C:\\root\\second",
p11_path_build ("C:\\root\\", "second", NULL));
- check_equals_and_free (tc, "C:\\root\\second\\third",
+ check_equals_and_free ("C:\\root\\second\\third",
p11_path_build ("C:\\root", "second", "third", NULL));
- check_equals_and_free (tc, "C:\\root\\second/third",
+ check_equals_and_free ("C:\\root\\second/third",
p11_path_build ("C:\\root", "second/third", NULL));
#endif
}
@@ -113,28 +113,34 @@ test_expand (void)
#ifdef OS_UNIX
putenv ("HOME=/home/blah");
- check_equals_and_free (tc, "/home/blah/my/path",
+ check_equals_and_free ("/home/blah/my/path",
p11_path_expand ("$HOME/my/path"));
- check_equals_and_free (tc, "/home/blah/my/path",
+ check_equals_and_free ("/home/blah/my/path",
p11_path_expand ("~/my/path"));
+ check_equals_and_free ("/home/blah",
+ p11_path_expand ("$HOME"));
+ check_equals_and_free ("/home/blah",
+ p11_path_expand ("~"));
putenv ("TEMP=/tmpdir");
- check_equals_and_free (tc, "/tmpdir/my/path",
+ check_equals_and_free ("/tmpdir/my/path",
p11_path_expand ("$TEMP/my/path"));
+ check_equals_and_free ("/tmpdir",
+ p11_path_expand ("$TEMP"));
#else /* OS_WIN32 */
putenv ("HOME=C:\\Users\\blah");
- check_equals_and_free (tc, "C:\\Users\\blah\\path",
+ check_equals_and_free ("C:\\Users\\blah\\path",
p11_path_expand ("$HOME/path"));
- check_equals_and_free (tc, "C:\\Users\\blah\\path",
+ check_equals_and_free ("C:\\Users\\blah\\path",
p11_path_expand ("$HOME\\path"));
- check_equals_and_free (tc, "C:\\Users\\blah\\path",
+ check_equals_and_free ("C:\\Users\\blah\\path",
p11_path_expand ("~/path"));
- check_equals_and_free (tc, "C:\\Users\\blah\\path",
+ check_equals_and_free ("C:\\Users\\blah\\path",
p11_path_expand ("~\\path"));
putenv ("TEMP=C:\\Temp Directory");
- check_equals_and_free (tc, "C:\\Temp Directory\\path",
+ check_equals_and_free ("C:\\Temp Directory\\path",
p11_path_expand ("$TEMP/path"));
- check_equals_and_free (tc, "C:\\Temp Directory\\path",
+ check_equals_and_free ("C:\\Temp Directory\\path",
p11_path_expand ("$TEMP\\path"));
#endif