Loading install.cpp +5 −5 Original line number Diff line number Diff line Loading @@ -124,20 +124,20 @@ try_update_binary(const char* path, ZipArchive* zip, bool* wipe_cache) { // - the name of the package zip file. // const char** args = (const char**)malloc(sizeof(char*) * 5); const char* args[5]; args[0] = binary; args[1] = EXPAND(RECOVERY_API_VERSION); // defined in Android.mk char* temp = (char*)malloc(10); sprintf(temp, "%d", pipefd[1]); char temp[16]; snprintf(temp, sizeof(temp), "%d", pipefd[1]); args[2] = temp; args[3] = (char*)path; args[3] = path; args[4] = NULL; pid_t pid = fork(); if (pid == 0) { umask(022); close(pipefd[0]); execv(binary, (char* const*)args); execv(binary, const_cast<char**>(args)); fprintf(stdout, "E:Can't run %s (%s)\n", binary, strerror(errno)); _exit(-1); } Loading minui/resources.cpp +9 −13 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include <linux/fb.h> #include <linux/kd.h> #include <vector> #include <png.h> #include "minui.h" Loading Loading @@ -398,18 +399,13 @@ int res_create_localized_alpha_surface(const char* name, png_infop info_ptr = NULL; png_uint_32 width, height; png_byte channels; unsigned char* row; png_uint_32 y; std::vector<unsigned char> row; *pSurface = NULL; if (locale == NULL) { surface = malloc_surface(0); surface->width = 0; surface->height = 0; surface->row_bytes = 0; surface->pixel_bytes = 1; goto exit; return result; } result = open_png(name, &png_ptr, &info_ptr, &width, &height, &channels); Loading @@ -420,13 +416,13 @@ int res_create_localized_alpha_surface(const char* name, goto exit; } row = reinterpret_cast<unsigned char*>(malloc(width)); row.resize(width); for (y = 0; y < height; ++y) { png_read_row(png_ptr, row, NULL); png_read_row(png_ptr, row.data(), NULL); int w = (row[1] << 8) | row[0]; int h = (row[3] << 8) | row[2]; int len = row[4]; char* loc = (char*)row+5; char* loc = reinterpret_cast<char*>(&row[5]); if (y+1+h >= height || matches_locale(loc, locale)) { printf(" %20s: %s (%d x %d @ %d)\n", name, loc, w, h, y); Loading @@ -443,8 +439,8 @@ int res_create_localized_alpha_surface(const char* name, int i; for (i = 0; i < h; ++i, ++y) { png_read_row(png_ptr, row, NULL); memcpy(surface->data + i*w, row, w); png_read_row(png_ptr, row.data(), NULL); memcpy(surface->data + i*w, row.data(), w); } *pSurface = reinterpret_cast<GRSurface*>(surface); Loading @@ -452,7 +448,7 @@ int res_create_localized_alpha_surface(const char* name, } else { int i; for (i = 0; i < h; ++i, ++y) { png_read_row(png_ptr, row, NULL); png_read_row(png_ptr, row.data(), NULL); } } } Loading minzip/Android.mk +1 −1 Original line number Diff line number Diff line Loading @@ -4,7 +4,7 @@ include $(CLEAR_VARS) LOCAL_SRC_FILES := \ Hash.c \ SysUtil.c \ DirUtil.c \ DirUtil.cpp \ Inlines.c \ Zip.c Loading minzip/DirUtil.c→minzip/DirUtil.cpp +20 −41 Original line number Diff line number Diff line Loading @@ -24,6 +24,8 @@ #include <dirent.h> #include <limits.h> #include <string> #include "DirUtil.h" typedef enum { DMISSING, DDIR, DILLEGAL } DirStatus; Loading Loading @@ -66,43 +68,25 @@ dirCreateHierarchy(const char *path, int mode, errno = ENOENT; return -1; } /* Allocate a path that we can modify; stick a slash on * the end to make things easier. */ size_t pathLen = strlen(path); char *cpath = (char *)malloc(pathLen + 2); if (cpath == NULL) { errno = ENOMEM; return -1; } memcpy(cpath, path, pathLen); // Allocate a path that we can modify; stick a slash on // the end to make things easier. std::string cpath = path; if (stripFileName) { /* Strip everything after the last slash. */ char *c = cpath + pathLen - 1; while (c != cpath && *c != '/') { c--; } if (c == cpath) { //xxx test this path /* No directory component. Act like the path was empty. */ // Strip everything after the last slash. size_t pos = cpath.rfind('/'); if (pos == std::string::npos) { errno = ENOENT; free(cpath); return -1; } c[1] = '\0'; // Terminate after the slash we found. cpath.resize(pos + 1); } else { /* Make sure that the path ends in a slash. */ cpath[pathLen] = '/'; cpath[pathLen + 1] = '\0'; // Make sure that the path ends in a slash. cpath.push_back('/'); } /* See if it already exists. */ ds = getPathDirStatus(cpath); ds = getPathDirStatus(cpath.c_str()); if (ds == DDIR) { return 0; } else if (ds == DILLEGAL) { Loading @@ -112,7 +96,8 @@ dirCreateHierarchy(const char *path, int mode, /* Walk up the path from the root and make each level. * If a directory already exists, no big deal. */ char *p = cpath; const char *path_start = &cpath[0]; char *p = &cpath[0]; while (*p != '\0') { /* Skip any slashes, watching out for the end of the string. */ Loading @@ -135,12 +120,11 @@ dirCreateHierarchy(const char *path, int mode, /* Check this part of the path and make a new directory * if necessary. */ ds = getPathDirStatus(cpath); ds = getPathDirStatus(path_start); if (ds == DILLEGAL) { /* Could happen if some other process/thread is * messing with the filesystem. */ free(cpath); return -1; } else if (ds == DMISSING) { int err; Loading @@ -148,11 +132,11 @@ dirCreateHierarchy(const char *path, int mode, char *secontext = NULL; if (sehnd) { selabel_lookup(sehnd, &secontext, cpath, mode); selabel_lookup(sehnd, &secontext, path_start, mode); setfscreatecon(secontext); } err = mkdir(cpath, mode); err = mkdir(path_start, mode); if (secontext) { freecon(secontext); Loading @@ -160,22 +144,17 @@ dirCreateHierarchy(const char *path, int mode, } if (err != 0) { free(cpath); return -1; } if (timestamp != NULL && utime(cpath, timestamp)) { free(cpath); if (timestamp != NULL && utime(path_start, timestamp)) { return -1; } } // else, this directory already exists. /* Repair the path and continue. */ // Repair the path and continue. *p = '/'; } free(cpath); return 0; } Loading Loading
install.cpp +5 −5 Original line number Diff line number Diff line Loading @@ -124,20 +124,20 @@ try_update_binary(const char* path, ZipArchive* zip, bool* wipe_cache) { // - the name of the package zip file. // const char** args = (const char**)malloc(sizeof(char*) * 5); const char* args[5]; args[0] = binary; args[1] = EXPAND(RECOVERY_API_VERSION); // defined in Android.mk char* temp = (char*)malloc(10); sprintf(temp, "%d", pipefd[1]); char temp[16]; snprintf(temp, sizeof(temp), "%d", pipefd[1]); args[2] = temp; args[3] = (char*)path; args[3] = path; args[4] = NULL; pid_t pid = fork(); if (pid == 0) { umask(022); close(pipefd[0]); execv(binary, (char* const*)args); execv(binary, const_cast<char**>(args)); fprintf(stdout, "E:Can't run %s (%s)\n", binary, strerror(errno)); _exit(-1); } Loading
minui/resources.cpp +9 −13 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include <linux/fb.h> #include <linux/kd.h> #include <vector> #include <png.h> #include "minui.h" Loading Loading @@ -398,18 +399,13 @@ int res_create_localized_alpha_surface(const char* name, png_infop info_ptr = NULL; png_uint_32 width, height; png_byte channels; unsigned char* row; png_uint_32 y; std::vector<unsigned char> row; *pSurface = NULL; if (locale == NULL) { surface = malloc_surface(0); surface->width = 0; surface->height = 0; surface->row_bytes = 0; surface->pixel_bytes = 1; goto exit; return result; } result = open_png(name, &png_ptr, &info_ptr, &width, &height, &channels); Loading @@ -420,13 +416,13 @@ int res_create_localized_alpha_surface(const char* name, goto exit; } row = reinterpret_cast<unsigned char*>(malloc(width)); row.resize(width); for (y = 0; y < height; ++y) { png_read_row(png_ptr, row, NULL); png_read_row(png_ptr, row.data(), NULL); int w = (row[1] << 8) | row[0]; int h = (row[3] << 8) | row[2]; int len = row[4]; char* loc = (char*)row+5; char* loc = reinterpret_cast<char*>(&row[5]); if (y+1+h >= height || matches_locale(loc, locale)) { printf(" %20s: %s (%d x %d @ %d)\n", name, loc, w, h, y); Loading @@ -443,8 +439,8 @@ int res_create_localized_alpha_surface(const char* name, int i; for (i = 0; i < h; ++i, ++y) { png_read_row(png_ptr, row, NULL); memcpy(surface->data + i*w, row, w); png_read_row(png_ptr, row.data(), NULL); memcpy(surface->data + i*w, row.data(), w); } *pSurface = reinterpret_cast<GRSurface*>(surface); Loading @@ -452,7 +448,7 @@ int res_create_localized_alpha_surface(const char* name, } else { int i; for (i = 0; i < h; ++i, ++y) { png_read_row(png_ptr, row, NULL); png_read_row(png_ptr, row.data(), NULL); } } } Loading
minzip/Android.mk +1 −1 Original line number Diff line number Diff line Loading @@ -4,7 +4,7 @@ include $(CLEAR_VARS) LOCAL_SRC_FILES := \ Hash.c \ SysUtil.c \ DirUtil.c \ DirUtil.cpp \ Inlines.c \ Zip.c Loading
minzip/DirUtil.c→minzip/DirUtil.cpp +20 −41 Original line number Diff line number Diff line Loading @@ -24,6 +24,8 @@ #include <dirent.h> #include <limits.h> #include <string> #include "DirUtil.h" typedef enum { DMISSING, DDIR, DILLEGAL } DirStatus; Loading Loading @@ -66,43 +68,25 @@ dirCreateHierarchy(const char *path, int mode, errno = ENOENT; return -1; } /* Allocate a path that we can modify; stick a slash on * the end to make things easier. */ size_t pathLen = strlen(path); char *cpath = (char *)malloc(pathLen + 2); if (cpath == NULL) { errno = ENOMEM; return -1; } memcpy(cpath, path, pathLen); // Allocate a path that we can modify; stick a slash on // the end to make things easier. std::string cpath = path; if (stripFileName) { /* Strip everything after the last slash. */ char *c = cpath + pathLen - 1; while (c != cpath && *c != '/') { c--; } if (c == cpath) { //xxx test this path /* No directory component. Act like the path was empty. */ // Strip everything after the last slash. size_t pos = cpath.rfind('/'); if (pos == std::string::npos) { errno = ENOENT; free(cpath); return -1; } c[1] = '\0'; // Terminate after the slash we found. cpath.resize(pos + 1); } else { /* Make sure that the path ends in a slash. */ cpath[pathLen] = '/'; cpath[pathLen + 1] = '\0'; // Make sure that the path ends in a slash. cpath.push_back('/'); } /* See if it already exists. */ ds = getPathDirStatus(cpath); ds = getPathDirStatus(cpath.c_str()); if (ds == DDIR) { return 0; } else if (ds == DILLEGAL) { Loading @@ -112,7 +96,8 @@ dirCreateHierarchy(const char *path, int mode, /* Walk up the path from the root and make each level. * If a directory already exists, no big deal. */ char *p = cpath; const char *path_start = &cpath[0]; char *p = &cpath[0]; while (*p != '\0') { /* Skip any slashes, watching out for the end of the string. */ Loading @@ -135,12 +120,11 @@ dirCreateHierarchy(const char *path, int mode, /* Check this part of the path and make a new directory * if necessary. */ ds = getPathDirStatus(cpath); ds = getPathDirStatus(path_start); if (ds == DILLEGAL) { /* Could happen if some other process/thread is * messing with the filesystem. */ free(cpath); return -1; } else if (ds == DMISSING) { int err; Loading @@ -148,11 +132,11 @@ dirCreateHierarchy(const char *path, int mode, char *secontext = NULL; if (sehnd) { selabel_lookup(sehnd, &secontext, cpath, mode); selabel_lookup(sehnd, &secontext, path_start, mode); setfscreatecon(secontext); } err = mkdir(cpath, mode); err = mkdir(path_start, mode); if (secontext) { freecon(secontext); Loading @@ -160,22 +144,17 @@ dirCreateHierarchy(const char *path, int mode, } if (err != 0) { free(cpath); return -1; } if (timestamp != NULL && utime(cpath, timestamp)) { free(cpath); if (timestamp != NULL && utime(path_start, timestamp)) { return -1; } } // else, this directory already exists. /* Repair the path and continue. */ // Repair the path and continue. *p = '/'; } free(cpath); return 0; } Loading