diff options
author | Tor Lillqvist <tlillqvist@suse.com> | 2012-02-20 20:02:25 +0200 |
---|---|---|
committer | Tor Lillqvist <tlillqvist@suse.com> | 2012-02-20 20:07:35 +0200 |
commit | e14fea9f37033c918380df7ad4d4237052208eae (patch) | |
tree | b7b6647d5d78471efa4b5d57efdd761cde67b137 /sal | |
parent | a99083d233d0d5c5a09941ec2ee7164bc63c61db (diff) |
Work around the fact that empty directories are not present in an .apk
The SDK tooling that constructs .apk packages doesn't put empty
directories in them. Which makes sense I guess. "Hidden" files (like
.gitignore) are also skipped. So a directory like
sc/qa/unit/qpro/indeterminate does not show up at all.
So, we must pretend that any opendir() of a directory under /assets
succeeds. If the .apk doesn't contain any files in such a directory,
treat it as existing but empty. We can't know if the corresponding
directory from which /assets was constructed actually does exist but
is empty or if it doesn't exist.
Diffstat (limited to 'sal')
-rw-r--r-- | sal/android/lo-bootstrap.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/sal/android/lo-bootstrap.c b/sal/android/lo-bootstrap.c index 1140515fb4f2..96d605881ad4 100644 --- a/sal/android/lo-bootstrap.c +++ b/sal/android/lo-bootstrap.c @@ -1030,9 +1030,19 @@ lo_apk_opendir(const char *dirname) HASH_FIND(hh, dir, p, (unsigned)(q - p), entry); - if (entry == NULL) { + if (entry == NULL && *q == '/') { errno = ENOENT; return NULL; + } else if (entry == NULL) { + /* Empty directories, or directories containing only "hidden" + * files (like the .gitignore in sc/qa/unit/qpro/indeterminate) + * are not present in the .apk. So we need to pretend that any + * directory that doesn't exist as a parent of an entry in the + * .apk *does* exist but is empty. + */ + lo_apk_dir *result = malloc(sizeof(*result)); + result->cur = NULL; + return result; } if (entry->kind != DIRECTORY) { |