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