MediaPipe MedataExtractor: use absl::Cleanup for unzClose / unzCloseCurrentFile.
PiperOrigin-RevId: 479211019
This commit is contained in:
parent
1a88968099
commit
42978d3e69
|
@ -21,6 +21,7 @@ cc_library(
|
||||||
"//mediapipe/tasks/cc:common",
|
"//mediapipe/tasks/cc:common",
|
||||||
"//mediapipe/tasks/cc/metadata/utils:zip_readonly_mem_file",
|
"//mediapipe/tasks/cc/metadata/utils:zip_readonly_mem_file",
|
||||||
"//mediapipe/tasks/metadata:metadata_schema_cc",
|
"//mediapipe/tasks/metadata:metadata_schema_cc",
|
||||||
|
"@com_google_absl//absl/cleanup",
|
||||||
"@com_google_absl//absl/container:flat_hash_map",
|
"@com_google_absl//absl/container:flat_hash_map",
|
||||||
"@com_google_absl//absl/memory",
|
"@com_google_absl//absl/memory",
|
||||||
"@com_google_absl//absl/status",
|
"@com_google_absl//absl/status",
|
||||||
|
|
|
@ -17,6 +17,7 @@ limitations under the License.
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
#include "absl/cleanup/cleanup.h"
|
||||||
#include "absl/memory/memory.h"
|
#include "absl/memory/memory.h"
|
||||||
#include "absl/status/status.h"
|
#include "absl/status/status.h"
|
||||||
#include "absl/strings/str_format.h"
|
#include "absl/strings/str_format.h"
|
||||||
|
@ -79,6 +80,12 @@ absl::StatusOr<ZipFileInfo> GetCurrentZipFileInfo(const unzFile& zf) {
|
||||||
int method;
|
int method;
|
||||||
MP_RETURN_IF_ERROR(UnzipErrorToStatus(
|
MP_RETURN_IF_ERROR(UnzipErrorToStatus(
|
||||||
unzOpenCurrentFile2(zf, &method, /*level=*/nullptr, /*raw=*/1)));
|
unzOpenCurrentFile2(zf, &method, /*level=*/nullptr, /*raw=*/1)));
|
||||||
|
absl::Cleanup unzipper_closer = [zf]() {
|
||||||
|
auto status = UnzipErrorToStatus(unzCloseCurrentFile(zf));
|
||||||
|
if (!status.ok()) {
|
||||||
|
LOG(ERROR) << "Failed to close the current zip file: " << status;
|
||||||
|
}
|
||||||
|
};
|
||||||
if (method != Z_NO_COMPRESSION) {
|
if (method != Z_NO_COMPRESSION) {
|
||||||
return CreateStatusWithPayload(
|
return CreateStatusWithPayload(
|
||||||
StatusCode::kUnknown, "Expected uncompressed zip archive.",
|
StatusCode::kUnknown, "Expected uncompressed zip archive.",
|
||||||
|
@ -110,6 +117,8 @@ absl::StatusOr<ZipFileInfo> GetCurrentZipFileInfo(const unzFile& zf) {
|
||||||
MediaPipeTasksStatus::kMetadataAssociatedFileZipError);
|
MediaPipeTasksStatus::kMetadataAssociatedFileZipError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Perform the cleanup manually for error propagation.
|
||||||
|
std::move(unzipper_closer).Cancel();
|
||||||
// Close file and return.
|
// Close file and return.
|
||||||
MP_RETURN_IF_ERROR(UnzipErrorToStatus(unzCloseCurrentFile(zf)));
|
MP_RETURN_IF_ERROR(UnzipErrorToStatus(unzCloseCurrentFile(zf)));
|
||||||
|
|
||||||
|
@ -247,6 +256,11 @@ absl::Status ModelMetadataExtractor::ExtractAssociatedFiles(
|
||||||
// model.
|
// model.
|
||||||
return absl::OkStatus();
|
return absl::OkStatus();
|
||||||
}
|
}
|
||||||
|
absl::Cleanup unzipper_closer = [zf]() {
|
||||||
|
if (unzClose(zf) != UNZ_OK) {
|
||||||
|
LOG(ERROR) << "Unable to close zip archive.";
|
||||||
|
}
|
||||||
|
};
|
||||||
// Get number of files.
|
// Get number of files.
|
||||||
unz_global_info global_info;
|
unz_global_info global_info;
|
||||||
if (unzGetGlobalInfo(zf, &global_info) != UNZ_OK) {
|
if (unzGetGlobalInfo(zf, &global_info) != UNZ_OK) {
|
||||||
|
@ -272,6 +286,9 @@ absl::Status ModelMetadataExtractor::ExtractAssociatedFiles(
|
||||||
MediaPipeTasksStatus::kMetadataAssociatedFileZipError);
|
MediaPipeTasksStatus::kMetadataAssociatedFileZipError);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Perform the cleanup manually for error propagation.
|
||||||
|
std::move(unzipper_closer).Cancel();
|
||||||
// Close zip.
|
// Close zip.
|
||||||
if (unzClose(zf) != UNZ_OK) {
|
if (unzClose(zf) != UNZ_OK) {
|
||||||
return CreateStatusWithPayload(
|
return CreateStatusWithPayload(
|
||||||
|
|
Loading…
Reference in New Issue
Block a user