int VolumeManager::findAsec(const char *id, char *asecPath, size_t asecPathLen, const char **directory) const { char *asecName; if (!isLegalAsecId(id)) { SLOGE("findAsec: Invalid asec id \"%s\"", id); errno = EINVAL; return -1; } if (asprintf(&asecName, "%s.asec", id) < 0) { SLOGE("Couldn't allocate string to write ASEC name"); return -1; } const char *dir; if (isAsecInDirectory(Volume::SEC_ASECDIR_INT, asecName)) { dir = Volume::SEC_ASECDIR_INT; } else if (isAsecInDirectory(Volume::SEC_ASECDIR_EXT, asecName)) { dir = Volume::SEC_ASECDIR_EXT; } else { free(asecName); return -1; } if (directory != NULL) { *directory = dir; } if (asecPath != NULL) { int written = snprintf(asecPath, asecPathLen, "%s/%s", dir, asecName); if ((written < 0) || (size_t(written) >= asecPathLen)) { SLOGE("findAsec failed for %s: couldn't construct ASEC path", id); free(asecName); return -1; } } free(asecName); return 0; }
int VolumeManager::findAsec(const char *id, char *asecPath, size_t asecPathLen, const char **directory) const { int dirfd, fd; const int idLen = strlen(id); char *asecName; if (asprintf(&asecName, "%s.asec", id) < 0) { SLOGE("Couldn't allocate string to write ASEC name"); return -1; } const char *dir; if (isAsecInDirectory(Volume::SEC_ASECDIR_INT, asecName)) { dir = Volume::SEC_ASECDIR_INT; } else if (isAsecInDirectory(Volume::SEC_ASECDIR_EXT, asecName)) { dir = Volume::SEC_ASECDIR_EXT; } else { free(asecName); return -1; } if (directory != NULL) { *directory = dir; } if (asecPath != NULL) { int written = snprintf(asecPath, asecPathLen, "%s/%s", dir, asecName); if (written < 0 || static_cast<size_t>(written) >= asecPathLen) { free(asecName); return -1; } } free(asecName); return 0; }