summaryrefslogtreecommitdiff
path: root/sal/android
diff options
context:
space:
mode:
authorTor Lillqvist <tlillqvist@suse.com>2012-02-20 20:02:25 +0200
committerTor Lillqvist <tlillqvist@suse.com>2012-02-20 20:07:35 +0200
commite14fea9f37033c918380df7ad4d4237052208eae (patch)
treeb7b6647d5d78471efa4b5d57efdd761cde67b137 /sal/android
parenta99083d233d0d5c5a09941ec2ee7164bc63c61db (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/android')
-rw-r--r--sal/android/lo-bootstrap.c12
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) {