summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/util.c4
-rw-r--r--test/lilv_test.c10
2 files changed, 12 insertions, 2 deletions
diff --git a/src/util.c b/src/util.c
index e0cd027..8079bab 100644
--- a/src/util.c
+++ b/src/util.c
@@ -170,7 +170,7 @@ lilv_expand(const char* path)
if (*s == '$') {
// Hit $ (variable reference, e.g. $VAR_NAME)
for (const char* t = s + 1; ; ++t) {
- if (*t == '\0' || !(isupper(*t) || *t == '_')) {
+ if (!*t || !(isupper(*t) || isdigit(*t) || *t == '_')) {
// Append preceding chunk
out = strappend(out, &len, start, s - start);
@@ -185,7 +185,7 @@ lilv_expand(const char* path)
break;
}
}
- } else if (*s == '~' && (*(s + 1) == '/' || (*(s + 1) == '\0'))) {
+ } else if (*s == '~' && (*(s + 1) == '/' || !*(s + 1))) {
// Hit ~ before slash or end of string (home directory reference)
out = strappend(out, &len, start, s - start);
append_var(out, &len, "HOME");
diff --git a/test/lilv_test.c b/test/lilv_test.c
index c8c565a..1a02889 100644
--- a/test/lilv_test.c
+++ b/test/lilv_test.c
@@ -1421,6 +1421,16 @@ test_string(void)
TEST_ASSERT(!strcmp((s = lilv_path_join("/a/", "/b")), "/a/b"));
TEST_ASSERT(!strcmp((s = lilv_path_join("/a/", "b")), "/a/b"));
+ setenv("LILV_TEST_1", "test", 1);
+ char* home_foo = lilv_strjoin(getenv("HOME"), "/foo", NULL);
+ TEST_ASSERT(!strcmp((s = lilv_expand("$LILV_TEST_1")), "test"));
+ TEST_ASSERT(!strcmp((s = lilv_expand("~")), getenv("HOME")));
+ TEST_ASSERT(!strcmp((s = lilv_expand("~foo")), "~foo"));
+ TEST_ASSERT(!strcmp((s = lilv_expand("~/foo")), home_foo));
+ TEST_ASSERT(!strcmp((s = lilv_expand("$NOT_A_VAR")), "$NOT_A_VAR"));
+ free(home_foo);
+ unsetenv("LILV_TEST_1");
+
return 1;
}