| namespace third_party_unrar { |
| |
| 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 |
| } |
| |
| } |