| 45 | } |
| 46 | |
| 47 | FsNode* FollowLink(FsNode* link, FsNode* workingDir){ |
| 48 | assert(link); |
| 49 | |
| 50 | char buffer[PATH_MAX + 1]; |
| 51 | |
| 52 | auto bytesRead = link->ReadLink(buffer, PATH_MAX); |
| 53 | if(bytesRead < 0){ |
| 54 | Log::Warning("FollowLink: Readlink error %d", -bytesRead); |
| 55 | return nullptr; |
| 56 | } |
| 57 | buffer[bytesRead] = 0; // Null terminate |
| 58 | |
| 59 | FsNode* node = ResolvePath(buffer, workingDir, false); |
| 60 | |
| 61 | if(!node){ |
| 62 | Log::Warning("FollowLink: Failed to resolve symlink %s!", buffer); |
| 63 | } |
| 64 | return node; |
| 65 | } |
| 66 | |
| 67 | FsNode* ResolvePath(const char* path, const char* workingDir, bool followSymlinks){ |
| 68 | assert(path); |
no test coverage detected