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/metadata/utils:zip_readonly_mem_file",
 | 
			
		||||
        "//mediapipe/tasks/metadata:metadata_schema_cc",
 | 
			
		||||
        "@com_google_absl//absl/cleanup",
 | 
			
		||||
        "@com_google_absl//absl/container:flat_hash_map",
 | 
			
		||||
        "@com_google_absl//absl/memory",
 | 
			
		||||
        "@com_google_absl//absl/status",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,6 +17,7 @@ limitations under the License.
 | 
			
		|||
 | 
			
		||||
#include <string>
 | 
			
		||||
 | 
			
		||||
#include "absl/cleanup/cleanup.h"
 | 
			
		||||
#include "absl/memory/memory.h"
 | 
			
		||||
#include "absl/status/status.h"
 | 
			
		||||
#include "absl/strings/str_format.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -79,6 +80,12 @@ absl::StatusOr<ZipFileInfo> GetCurrentZipFileInfo(const unzFile& zf) {
 | 
			
		|||
  int method;
 | 
			
		||||
  MP_RETURN_IF_ERROR(UnzipErrorToStatus(
 | 
			
		||||
      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) {
 | 
			
		||||
    return CreateStatusWithPayload(
 | 
			
		||||
        StatusCode::kUnknown, "Expected uncompressed zip archive.",
 | 
			
		||||
| 
						 | 
				
			
			@ -110,6 +117,8 @@ absl::StatusOr<ZipFileInfo> GetCurrentZipFileInfo(const unzFile& zf) {
 | 
			
		|||
        MediaPipeTasksStatus::kMetadataAssociatedFileZipError);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Perform the cleanup manually for error propagation.
 | 
			
		||||
  std::move(unzipper_closer).Cancel();
 | 
			
		||||
  // Close file and return.
 | 
			
		||||
  MP_RETURN_IF_ERROR(UnzipErrorToStatus(unzCloseCurrentFile(zf)));
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -247,6 +256,11 @@ absl::Status ModelMetadataExtractor::ExtractAssociatedFiles(
 | 
			
		|||
    // model.
 | 
			
		||||
    return absl::OkStatus();
 | 
			
		||||
  }
 | 
			
		||||
  absl::Cleanup unzipper_closer = [zf]() {
 | 
			
		||||
    if (unzClose(zf) != UNZ_OK) {
 | 
			
		||||
      LOG(ERROR) << "Unable to close zip archive.";
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
  // Get number of files.
 | 
			
		||||
  unz_global_info global_info;
 | 
			
		||||
  if (unzGetGlobalInfo(zf, &global_info) != UNZ_OK) {
 | 
			
		||||
| 
						 | 
				
			
			@ -272,6 +286,9 @@ absl::Status ModelMetadataExtractor::ExtractAssociatedFiles(
 | 
			
		|||
          MediaPipeTasksStatus::kMetadataAssociatedFileZipError);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Perform the cleanup manually for error propagation.
 | 
			
		||||
  std::move(unzipper_closer).Cancel();
 | 
			
		||||
  // Close zip.
 | 
			
		||||
  if (unzClose(zf) != UNZ_OK) {
 | 
			
		||||
    return CreateStatusWithPayload(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user