Kaydet (Commit) e14fea9f authored tarafından Tor Lillqvist's avatar Tor Lillqvist

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.
üst a99083d2
...@@ -1030,9 +1030,19 @@ lo_apk_opendir(const char *dirname) ...@@ -1030,9 +1030,19 @@ lo_apk_opendir(const char *dirname)
HASH_FIND(hh, dir, p, (unsigned)(q - p), entry); HASH_FIND(hh, dir, p, (unsigned)(q - p), entry);
if (entry == NULL) { if (entry == NULL && *q == '/') {
errno = ENOENT; errno = ENOENT;
return NULL; 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) { if (entry->kind != DIRECTORY) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment