@@ -339,39 +339,7 @@ + (BOOL)unzipFileAtPath:(NSString *)path
339339
340340 BOOL  fileIsSymbolicLink = _fileIsSymbolicLink (&fileInfo);
341341
342-  NSString  * strPath = @(filename);
343-  if  (!strPath) {
344-  //  if filename is non-unicode, detect and transform Encoding
345-  NSData  *data = [NSData  dataWithBytes: (const  void  *)filename length: sizeof (unsigned  char ) * fileInfo.size_filename];
346- #ifdef  __MAC_10_13
347-  //  Xcode 9+
348-  if  (@available (macOS 10.10 , iOS 8.0 , watchOS 2.0 , tvOS 9.0 , *)) {
349-  //  supported encodings are in [NSString availableStringEncodings]
350-  [NSString  stringEncodingForData: data encodingOptions: nil  convertedString: &strPath usedLossyConversion: nil ];
351-  }
352- #else 
353-  //  Xcode 8-
354-  if  (floor (NSFoundationVersionNumber ) > NSFoundationVersionNumber10_9_2) {
355-  //  supported encodings are in [NSString availableStringEncodings]
356-  [NSString  stringEncodingForData: data encodingOptions: nil  convertedString: &strPath usedLossyConversion: nil ];
357-  }
358- #endif 
359-  else  {
360-  //  fallback to a simple manual detect for macOS 10.9 or older
361-  NSArray <NSNumber  *> *encodings = @[@(kCFStringEncodingGB_18030_2000 ), @(kCFStringEncodingShiftJIS )];
362-  for  (NSNumber  *encoding in encodings) {
363-  strPath = [NSString  stringWithCString: filename encoding: (NSStringEncoding )CFStringConvertEncodingToNSStringEncoding (encoding.unsignedIntValue)];
364-  if  (strPath) {
365-  break ;
366-  }
367-  }
368-  }
369-  if  (!strPath) {
370-  //  if filename encoding is non-detected, we default to something based on data
371-  //  _hexString is more readable than _base64RFC4648 for debugging unknown encodings
372-  strPath = [data _hexString ];
373-  }
374-  }
342+  NSString  * strPath = [SSZipArchive _filenameStringWithCString: filename size: fileInfo.size_filename];
375343 if  (!strPath.length ) {
376344 //  if filename data is unsalvageable, we default to currentFileNumber
377345 strPath = @(currentFileNumber).stringValue ;
@@ -929,6 +897,45 @@ - (BOOL)close
929897
930898#pragma mark  - Private
931899
900+ + (NSString  *)_filenameStringWithCString : (const  char  *)filename  size : (uint16_t )size_filename 
901+ {
902+  NSString  * strPath = @(filename);
903+  if  (strPath) {
904+  return  strPath;
905+  }
906+  //  if filename is non-unicode, detect and transform Encoding
907+  NSData  *data = [NSData  dataWithBytes: (const  void  *)filename length: sizeof (unsigned  char ) * size_filename];
908+ #ifdef  __MAC_10_13
909+  //  Xcode 9+
910+  if  (@available (macOS 10.10 , iOS 8.0 , watchOS 2.0 , tvOS 9.0 , *)) {
911+  //  supported encodings are in [NSString availableStringEncodings]
912+  [NSString  stringEncodingForData: data encodingOptions: nil  convertedString: &strPath usedLossyConversion: nil ];
913+  }
914+ #else 
915+  //  Xcode 8-
916+  if  (floor (NSFoundationVersionNumber ) > NSFoundationVersionNumber10_9_2) {
917+  //  supported encodings are in [NSString availableStringEncodings]
918+  [NSString  stringEncodingForData: data encodingOptions: nil  convertedString: &strPath usedLossyConversion: nil ];
919+  }
920+ #endif 
921+  else  {
922+  //  fallback to a simple manual detect for macOS 10.9 or older
923+  NSArray <NSNumber  *> *encodings = @[@(kCFStringEncodingGB_18030_2000 ), @(kCFStringEncodingShiftJIS )];
924+  for  (NSNumber  *encoding in encodings) {
925+  strPath = [NSString  stringWithCString: filename encoding: (NSStringEncoding )CFStringConvertEncodingToNSStringEncoding (encoding.unsignedIntValue)];
926+  if  (strPath) {
927+  break ;
928+  }
929+  }
930+  }
931+  if  (!strPath) {
932+  //  if filename encoding is non-detected, we default to something based on data
933+  //  _hexString is more readable than _base64RFC4648 for debugging unknown encodings
934+  strPath = [data _hexString ];
935+  }
936+  return  strPath;
937+ }
938+ 
932939+ (NSString  *)_temporaryPathForDiscardableFile 
933940{
934941 static  NSString  *discardableFileName = @" .DS_Store" 
0 commit comments