On Tue, Jul 17, 2012 at 2:05 PM, Lucas De Marchi <lucas.demar...@profusion.mobi> wrote: > On Tue, Jul 17, 2012 at 1:44 PM, Andrei Gherzan <and...@gherzan.ro> wrote: >> This is useful for filesystems where d_type is always DT_UNKNOWN. >> In this case use fstatat() function. >> --- >> src/storage.c | 19 +++++++++++++++++++ >> 1 file changed, 19 insertions(+) >> >> diff --git a/src/storage.c b/src/storage.c >> index 47bd0cb..0491a52 100644 >> --- a/src/storage.c >> +++ b/src/storage.c >> @@ -206,6 +206,25 @@ gchar **connman_storage_get_services() >> >> g_string_append_printf(result, "%s/", d->d_name); >> break; >> + case DT_UNKNOWN: >> + /* >> + * If there is no d_type support use stat() >> + * to check if directory >> + */ >> + ret = fstatat(dirfd(dir), d->d_name, &buf, 0); >> + if (ret < 0) >> + continue; >> + if (!(buf.st_mode & S_IFDIR)) >> + continue; > > too many parenthesis here? You could use: > > if (!S_ISDIR(buf.st_mode)) > > btw, a nitpick... struct stat on stack is more commonly named "st" > rather than buf. > > >> + str = g_strdup_printf("%s/%s/settings", STORAGEDIR, >> + d->d_name); >> + ret = stat(str, &buf); >> + g_free(str); >> + if (ret < 0) >> + continue; >> + >> + g_string_append_printf(result, "%s/", d->d_name); >> + break; > > the entire code above should be common to "case DT_DIR". An idea to > clean this up: > > Add "case DT_UNKOWN" before "case DT_DIR" and let it fall-through > without a break statement if it's a dir.
meh... of course this doesn't work. But you should put together the common part nonetheless. Maybe using a flag isdir and if/else it's easier Lucas De Marchi _______________________________________________ connman mailing list connman@connman.net http://lists.connman.net/listinfo/connman