Loading applypatch/applypatch.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -66,7 +66,7 @@ int LoadFileContents(const char* filename, FileContents* file) { } std::vector<unsigned char> data(file->st.st_size); std::unique_ptr<FILE, int (*)(FILE*)> f(ota_fopen(filename, "rb"), ota_fclose); unique_file f(ota_fopen(filename, "rb")); if (!f) { printf("failed to open \"%s\": %s\n", filename, strerror(errno)); return -1; Loading Loading @@ -118,7 +118,7 @@ static int LoadPartitionContents(const std::string& filename, FileContents* file std::sort(pairs.begin(), pairs.end()); const char* partition = pieces[1].c_str(); std::unique_ptr<FILE, int (*)(FILE*)> dev(ota_fopen(partition, "rb"), ota_fclose); unique_file dev(ota_fopen(partition, "rb")); if (!dev) { printf("failed to open emmc partition \"%s\": %s\n", partition, strerror(errno)); return -1; Loading otafault/ota_io.cpp +14 −6 Original line number Diff line number Diff line Loading @@ -70,23 +70,31 @@ FILE* ota_fopen(const char* path, const char* mode) { return fh; } int ota_close(int fd) { static int __ota_close(int fd) { // descriptors can be reused, so make sure not to leave them in the cache filename_cache.erase(fd); return close(fd); } void OtaCloser::Close(int fd) { __ota_close(fd); } int ota_close(unique_fd& fd) { return ota_close(fd.release()); return __ota_close(fd.release()); } int ota_fclose(FILE* fh) { filename_cache.erase((intptr_t)fh); static int __ota_fclose(FILE* fh) { filename_cache.erase(reinterpret_cast<intptr_t>(fh)); return fclose(fh); } int ota_fclose(std::unique_ptr<FILE, int (*)(FILE*)>& fh) { return ota_fclose(fh.release()); void OtaFcloser::operator()(FILE* f) { __ota_fclose(f); }; int ota_fclose(unique_file& fh) { return __ota_fclose(fh.release()); } size_t ota_fread(void* ptr, size_t size, size_t nitems, FILE* stream) { Loading otafault/ota_io.h +8 −8 Original line number Diff line number Diff line Loading @@ -40,10 +40,6 @@ int ota_open(const char* path, int oflags, mode_t mode); FILE* ota_fopen(const char* filename, const char* mode); int ota_close(int fd); int ota_fclose(FILE* fh); size_t ota_fread(void* ptr, size_t size, size_t nitems, FILE* stream); ssize_t ota_read(int fd, void* buf, size_t nbyte); Loading @@ -55,15 +51,19 @@ ssize_t ota_write(int fd, const void* buf, size_t nbyte); int ota_fsync(int fd); struct OtaCloser { static void Close(int fd) { ota_close(fd); } static void Close(int); }; using unique_fd = android::base::unique_fd_impl<OtaCloser>; int ota_close(unique_fd& fd); int ota_fclose(std::unique_ptr<FILE, int (*)(FILE*)>& fh); struct OtaFcloser { void operator()(FILE*); }; using unique_file = std::unique_ptr<FILE, OtaFcloser>; int ota_fclose(unique_file& fh); #endif updater/install.cpp +69 −73 Original line number Diff line number Diff line Loading @@ -509,8 +509,8 @@ Value* PackageExtractFileFn(const char* name, State* state, int argc, Expr* argv return StringValue(""); } int fd = TEMP_FAILURE_RETRY( ota_open(dest_path.c_str(), O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR)); unique_fd fd(TEMP_FAILURE_RETRY( ota_open(dest_path.c_str(), O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR))); if (fd == -1) { printf("%s: can't open %s for write: %s\n", name, dest_path.c_str(), strerror(errno)); return StringValue(""); Loading Loading @@ -896,16 +896,15 @@ Value* FileGetPropFn(const char* name, State* state, int argc, Expr* argv[]) { } std::string buffer(st.st_size, '\0'); FILE* f = ota_fopen(filename.c_str(), "rb"); unique_file f(ota_fopen(filename.c_str(), "rb")); if (f == nullptr) { return ErrorAbort(state, kFileOpenFailure, "%s: failed to open %s: %s", name, filename.c_str(), strerror(errno)); return ErrorAbort(state, kFileOpenFailure, "%s: failed to open %s: %s", name, filename.c_str(), strerror(errno)); } if (ota_fread(&buffer[0], 1, st.st_size, f) != static_cast<size_t>(st.st_size)) { ErrorAbort(state, kFreadFailure, "%s: failed to read %zu bytes from %s", name, static_cast<size_t>(st.st_size), filename.c_str()); ota_fclose(f); if (ota_fread(&buffer[0], 1, st.st_size, f.get()) != static_cast<size_t>(st.st_size)) { ErrorAbort(state, kFreadFailure, "%s: failed to read %zu bytes from %s", name, static_cast<size_t>(st.st_size), filename.c_str()); return nullptr; } Loading Loading @@ -1307,13 +1306,10 @@ Value* WipeBlockDeviceFn(const char* name, State* state, int argc, Expr* argv[]) if (!android::base::ParseUint(len_str.c_str(), &len)) { return nullptr; } int fd = ota_open(filename.c_str(), O_WRONLY, 0644); unique_fd fd(ota_open(filename.c_str(), O_WRONLY, 0644)); // The wipe_block_device function in ext4_utils returns 0 on success and 1 // for failure. int status = wipe_block_device(fd, len); ota_close(fd); return StringValue((status == 0) ? "t" : ""); } Loading Loading
applypatch/applypatch.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -66,7 +66,7 @@ int LoadFileContents(const char* filename, FileContents* file) { } std::vector<unsigned char> data(file->st.st_size); std::unique_ptr<FILE, int (*)(FILE*)> f(ota_fopen(filename, "rb"), ota_fclose); unique_file f(ota_fopen(filename, "rb")); if (!f) { printf("failed to open \"%s\": %s\n", filename, strerror(errno)); return -1; Loading Loading @@ -118,7 +118,7 @@ static int LoadPartitionContents(const std::string& filename, FileContents* file std::sort(pairs.begin(), pairs.end()); const char* partition = pieces[1].c_str(); std::unique_ptr<FILE, int (*)(FILE*)> dev(ota_fopen(partition, "rb"), ota_fclose); unique_file dev(ota_fopen(partition, "rb")); if (!dev) { printf("failed to open emmc partition \"%s\": %s\n", partition, strerror(errno)); return -1; Loading
otafault/ota_io.cpp +14 −6 Original line number Diff line number Diff line Loading @@ -70,23 +70,31 @@ FILE* ota_fopen(const char* path, const char* mode) { return fh; } int ota_close(int fd) { static int __ota_close(int fd) { // descriptors can be reused, so make sure not to leave them in the cache filename_cache.erase(fd); return close(fd); } void OtaCloser::Close(int fd) { __ota_close(fd); } int ota_close(unique_fd& fd) { return ota_close(fd.release()); return __ota_close(fd.release()); } int ota_fclose(FILE* fh) { filename_cache.erase((intptr_t)fh); static int __ota_fclose(FILE* fh) { filename_cache.erase(reinterpret_cast<intptr_t>(fh)); return fclose(fh); } int ota_fclose(std::unique_ptr<FILE, int (*)(FILE*)>& fh) { return ota_fclose(fh.release()); void OtaFcloser::operator()(FILE* f) { __ota_fclose(f); }; int ota_fclose(unique_file& fh) { return __ota_fclose(fh.release()); } size_t ota_fread(void* ptr, size_t size, size_t nitems, FILE* stream) { Loading
otafault/ota_io.h +8 −8 Original line number Diff line number Diff line Loading @@ -40,10 +40,6 @@ int ota_open(const char* path, int oflags, mode_t mode); FILE* ota_fopen(const char* filename, const char* mode); int ota_close(int fd); int ota_fclose(FILE* fh); size_t ota_fread(void* ptr, size_t size, size_t nitems, FILE* stream); ssize_t ota_read(int fd, void* buf, size_t nbyte); Loading @@ -55,15 +51,19 @@ ssize_t ota_write(int fd, const void* buf, size_t nbyte); int ota_fsync(int fd); struct OtaCloser { static void Close(int fd) { ota_close(fd); } static void Close(int); }; using unique_fd = android::base::unique_fd_impl<OtaCloser>; int ota_close(unique_fd& fd); int ota_fclose(std::unique_ptr<FILE, int (*)(FILE*)>& fh); struct OtaFcloser { void operator()(FILE*); }; using unique_file = std::unique_ptr<FILE, OtaFcloser>; int ota_fclose(unique_file& fh); #endif
updater/install.cpp +69 −73 Original line number Diff line number Diff line Loading @@ -509,8 +509,8 @@ Value* PackageExtractFileFn(const char* name, State* state, int argc, Expr* argv return StringValue(""); } int fd = TEMP_FAILURE_RETRY( ota_open(dest_path.c_str(), O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR)); unique_fd fd(TEMP_FAILURE_RETRY( ota_open(dest_path.c_str(), O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR))); if (fd == -1) { printf("%s: can't open %s for write: %s\n", name, dest_path.c_str(), strerror(errno)); return StringValue(""); Loading Loading @@ -896,16 +896,15 @@ Value* FileGetPropFn(const char* name, State* state, int argc, Expr* argv[]) { } std::string buffer(st.st_size, '\0'); FILE* f = ota_fopen(filename.c_str(), "rb"); unique_file f(ota_fopen(filename.c_str(), "rb")); if (f == nullptr) { return ErrorAbort(state, kFileOpenFailure, "%s: failed to open %s: %s", name, filename.c_str(), strerror(errno)); return ErrorAbort(state, kFileOpenFailure, "%s: failed to open %s: %s", name, filename.c_str(), strerror(errno)); } if (ota_fread(&buffer[0], 1, st.st_size, f) != static_cast<size_t>(st.st_size)) { ErrorAbort(state, kFreadFailure, "%s: failed to read %zu bytes from %s", name, static_cast<size_t>(st.st_size), filename.c_str()); ota_fclose(f); if (ota_fread(&buffer[0], 1, st.st_size, f.get()) != static_cast<size_t>(st.st_size)) { ErrorAbort(state, kFreadFailure, "%s: failed to read %zu bytes from %s", name, static_cast<size_t>(st.st_size), filename.c_str()); return nullptr; } Loading Loading @@ -1307,13 +1306,10 @@ Value* WipeBlockDeviceFn(const char* name, State* state, int argc, Expr* argv[]) if (!android::base::ParseUint(len_str.c_str(), &len)) { return nullptr; } int fd = ota_open(filename.c_str(), O_WRONLY, 0644); unique_fd fd(ota_open(filename.c_str(), O_WRONLY, 0644)); // The wipe_block_device function in ext4_utils returns 0 on success and 1 // for failure. int status = wipe_block_device(fd, len); ota_close(fd); return StringValue((status == 0) ? "t" : ""); } Loading