diff --git a/src/plugin.cpp b/src/plugin.cpp index d9c0237e..79a7ab5a 100644 --- a/src/plugin.cpp +++ b/src/plugin.cpp @@ -235,27 +235,35 @@ static void loadPlugins(std::string path) { } } +/** Returns 0 if successful */ static int extractZipHandle(zip_t *za, const char *dir) { - int err = 0; + int err; for (int i = 0; i < zip_get_num_entries(za, 0); i++) { zip_stat_t zs; err = zip_stat_index(za, i, 0, &zs); - if (err) + if (err) { + warn("zip_stat_index() failed: error %d", err); return err; + } int nameLen = strlen(zs.name); char path[MAXPATHLEN]; snprintf(path, sizeof(path), "%s/%s", dir, zs.name); if (zs.name[nameLen - 1] == '/') { - err = mkdir(path, 0755); - if (err && errno != EEXIST) - return err; + if (mkdir(path, 0755)) { + if (errno != EEXIST) { + warn("mkdir(%s) failed: error %d", path, errno); + return errno; + } + } } else { zip_file_t *zf = zip_fopen_index(za, i, 0); - if (!zf) - return 1; + if (!zf) { + warn("zip_fopen_index() failed"); + return -1; + } FILE *outFile = fopen(path, "wb"); if (!outFile) @@ -270,24 +278,27 @@ static int extractZipHandle(zip_t *za, const char *dir) { } err = zip_fclose(zf); - if (err) + if (err) { + warn("zip_fclose() failed: error %d", err); return err; + } fclose(outFile); } } return 0; } +/** Returns 0 if successful */ static int extractZip(const char *filename, const char *path) { - int err = 0; + int err; zip_t *za = zip_open(filename, 0, &err); - if (!za) - return 1; + if (!za) { + warn("Could not open zip %s: error %d", filename, err); + return err; + } defer({ zip_close(za); }); - if (err) - return err; err = extractZipHandle(za, path); return err; @@ -297,15 +308,18 @@ static void extractPackages(std::string path) { std::string message; for (std::string packagePath : systemListEntries(path)) { - if (stringExtension(packagePath) == "zip") { - info("Extracting package %s", packagePath.c_str()); - // Extract package - if (extractZip(packagePath.c_str(), path.c_str())) { - message += stringf("Could not extract package %s\n", packagePath.c_str()); - continue; - } - // Remove package - remove(packagePath.c_str()); + if (stringExtension(packagePath) != "zip") + continue; + info("Extracting package %s", packagePath.c_str()); + // Extract package + if (extractZip(packagePath.c_str(), path.c_str())) { + warn("Package %s failed to extract", packagePath.c_str()); + message += stringf("Could not extract package %s\n", packagePath.c_str()); + continue; + } + // Remove package + if (remove(packagePath.c_str())) { + warn("Could not delete file %s: error %d", packagePath.c_str(), errno); } } if (!message.empty()) { @@ -332,9 +346,11 @@ void pluginInit() { #if RELEASE // Copy Fundamental package to plugins directory if folder does not exist - std::string fundamentalDest = localPlugins + "/Fundamental.zip"; - if (!systemIsDirectory(localPlugins + "/Fundamental") && !systemIsFile(fundamentalDest)) { - systemCopy(assetGlobal("Fundamental.zip"), fundamentalDest); + std::string fundamentalSrc = assetGlobal("Fundamental.zip"); + std::string fundamentalDest = assetLocal("plugins/Fundamental.zip"); + std::string fundamentalDir = assetLocal("plugins/Fundamental"); + if (!systemIsDirectory(fundamentalDir) && !systemIsFile(fundamentalDest)) { + systemCopy(fundamentalSrc, fundamentalDest); } #endif @@ -362,6 +378,7 @@ void pluginDestroy() { } bool pluginSync(bool dryRun) { + return false; if (gToken.empty()) return false;