libclamunrar/hardlinks.cpp
d39cb658
 bool ExtractHardlink(wchar *NameNew,wchar *NameExisting,size_t NameExistingSize)
 {
   SlashToNative(NameExisting,NameExisting,NameExistingSize); // Not needed for RAR 5.1+ archives.
 
   if (!FileExist(NameExisting))
   {
     uiMsg(UIERROR_HLINKCREATE,NameNew);
     uiMsg(UIERROR_NOLINKTARGET);
     ErrHandler.SetErrorCode(RARX_CREATE);
     return false;
   }
   CreatePath(NameNew,true);
 
 #ifdef _WIN_ALL
   bool Success=CreateHardLink(NameNew,NameExisting,NULL)!=0;
   if (!Success)
   {
     uiMsg(UIERROR_HLINKCREATE,NameNew);
     ErrHandler.SysErrMsg();
     ErrHandler.SetErrorCode(RARX_CREATE);
   }
   return Success;
 #elif defined(_UNIX)
   char NameExistingA[NM],NameNewA[NM];
   WideToChar(NameExisting,NameExistingA,ASIZE(NameExistingA));
   WideToChar(NameNew,NameNewA,ASIZE(NameNewA));
   bool Success=link(NameExistingA,NameNewA)==0;
   if (!Success)
   {
     uiMsg(UIERROR_HLINKCREATE,NameNew);
     ErrHandler.SysErrMsg();
     ErrHandler.SetErrorCode(RARX_CREATE);
   }
   return Success;
 #else
   return false;
 #endif
 }