allow to query path having heading /
authorJosé Bollo <jose.bollo@iot.bzh>
Thu, 10 Dec 2015 16:55:06 +0000 (17:55 +0100)
committerJosé Bollo <jose.bollo@iot.bzh>
Thu, 10 Dec 2015 16:55:06 +0000 (17:55 +0100)
Change-Id: I9be22c09557f426f271310fac4b1cdd5000e0161

src/wgt.c

index db59091..9c3cd6e 100644 (file)
--- a/src/wgt.c
+++ b/src/wgt.c
@@ -71,6 +71,13 @@ static int validsubpath(const char *subpath)
        return l >= 0;
 }
 
+static const char *normalsubpath(const char *subpath)
+{
+       while(*subpath == '/')
+               subpath++;
+       return validsubpath(subpath) ? subpath : NULL;
+}
+
 struct wgt *wgt_create()
 {
        struct wgt *wgt = malloc(sizeof * wgt);
@@ -150,7 +157,9 @@ int wgt_has(struct wgt *wgt, const char *filename)
 {
        assert(wgt);
        assert(wgt_is_connected(wgt));
-       if (!validsubpath(filename)) {
+
+       filename = normalsubpath(filename);
+       if (!filename) {
                errno = EINVAL;
                return -1;
        }
@@ -161,7 +170,8 @@ int wgt_open_read(struct wgt *wgt, const char *filename)
 {
        assert(wgt);
        assert(wgt_is_connected(wgt));
-       if (!validsubpath(filename)) {
+       filename = normalsubpath(filename);
+       if (!filename) {
                errno = EINVAL;
                return -1;
        }
@@ -229,7 +239,8 @@ static const char *localize(struct wgt *wgt, const char *filename, char path[PAT
 {
        int i;
 
-       if (!validsubpath(filename)) {
+       filename = normalsubpath(filename);
+       if (!filename) {
                errno = EINVAL;
                return NULL;
        }