Skip to content

Commit 5821a3b

Browse files
author
Zachary Turner
committed
[Support] Fill the file_status struct with link count.
Differential Revision: https://reviews.llvm.org/D31110 llvm-svn: 298326
1 parent 076a259 commit 5821a3b

File tree

4 files changed

+30
-16
lines changed

4 files changed

+30
-16
lines changed

lldb/source/Host/common/File.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "lldb/Host/windows/windows.h"
2020
#else
2121
#include <sys/ioctl.h>
22+
#include <sys/stat.h>
2223
#include <termios.h>
2324
#endif
2425

llvm/include/llvm/Support/FileSystem.h

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -147,13 +147,15 @@ class file_status
147147

148148
#if defined(LLVM_ON_UNIX)
149149
dev_t fs_st_dev = 0;
150+
nlink_t fs_st_nlinks = 0;
150151
ino_t fs_st_ino = 0;
151152
time_t fs_st_atime = 0;
152153
time_t fs_st_mtime = 0;
153154
uid_t fs_st_uid = 0;
154155
gid_t fs_st_gid = 0;
155156
off_t fs_st_size = 0;
156157
#elif defined (LLVM_ON_WIN32)
158+
uint32_t NumLinks = 0;
157159
uint32_t LastAccessedTimeHigh = 0;
158160
uint32_t LastAccessedTimeLow = 0;
159161
uint32_t LastWriteTimeHigh = 0;
@@ -173,22 +175,24 @@ class file_status
173175

174176
file_status(file_type Type) : Type(Type) {}
175177

176-
file_status(file_type Type, perms Perms, dev_t Dev, ino_t Ino, time_t ATime,
177-
time_t MTime, uid_t UID, gid_t GID, off_t Size)
178-
: fs_st_dev(Dev), fs_st_ino(Ino), fs_st_atime(ATime), fs_st_mtime(MTime),
179-
fs_st_uid(UID), fs_st_gid(GID), fs_st_size(Size), Type(Type),
180-
Perms(Perms) {}
178+
file_status(file_type Type, perms Perms, dev_t Dev, nlink_t Links, ino_t Ino,
179+
time_t ATime, time_t MTime, uid_t UID, gid_t GID, off_t Size)
180+
: fs_st_dev(Dev), fs_st_nlinks(Links), fs_st_ino(Ino), fs_st_atime(ATime),
181+
fs_st_mtime(MTime), fs_st_uid(UID), fs_st_gid(GID), fs_st_size(Size),
182+
Type(Type), Perms(Perms) {}
181183
#elif defined(LLVM_ON_WIN32)
182184
file_status() = default;
183185

184186
file_status(file_type Type) : Type(Type) {}
185187

186-
file_status(file_type Type, perms Perms, uint32_t LastAccessTimeHigh,
187-
uint32_t LastAccessTimeLow, uint32_t LastWriteTimeHigh,
188-
uint32_t LastWriteTimeLow, uint32_t VolumeSerialNumber,
189-
uint32_t FileSizeHigh, uint32_t FileSizeLow,
190-
uint32_t FileIndexHigh, uint32_t FileIndexLow)
191-
: LastAccessedTimeHigh(LastAccessTimeHigh), LastAccessedTimeLow(LastAccessTimeLow),
188+
file_status(file_type Type, perms Perms, uint32_t LinkCount,
189+
uint32_t LastAccessTimeHigh, uint32_t LastAccessTimeLow,
190+
uint32_t LastWriteTimeHigh, uint32_t LastWriteTimeLow,
191+
uint32_t VolumeSerialNumber, uint32_t FileSizeHigh,
192+
uint32_t FileSizeLow, uint32_t FileIndexHigh,
193+
uint32_t FileIndexLow)
194+
: NumLinks(LinkCount), LastAccessedTimeHigh(LastAccessTimeHigh),
195+
LastAccessedTimeLow(LastAccessTimeLow),
192196
LastWriteTimeHigh(LastWriteTimeHigh),
193197
LastWriteTimeLow(LastWriteTimeLow),
194198
VolumeSerialNumber(VolumeSerialNumber), FileSizeHigh(FileSizeHigh),
@@ -202,6 +206,7 @@ class file_status
202206
TimePoint<> getLastAccessedTime() const;
203207
TimePoint<> getLastModificationTime() const;
204208
UniqueID getUniqueID() const;
209+
uint32_t getLinkCount() const;
205210

206211
#if defined(LLVM_ON_UNIX)
207212
uint32_t getUser() const { return fs_st_uid; }

llvm/lib/Support/Unix/Path.inc

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,10 @@ UniqueID file_status::getUniqueID() const {
230230
return UniqueID(fs_st_dev, fs_st_ino);
231231
}
232232

233+
uint32_t file_status::getLinkCount() const {
234+
return fs_st_nlinks;
235+
}
236+
233237
ErrorOr<space_info> disk_space(const Twine &Path) {
234238
struct STATVFS Vfs;
235239
if (::STATVFS(Path.str().c_str(), &Vfs))
@@ -549,10 +553,9 @@ static std::error_code fillStatus(int StatRet, const struct stat &Status,
549553
Type = file_type::symlink_file;
550554

551555
perms Perms = static_cast<perms>(Status.st_mode) & all_perms;
552-
Result =
553-
file_status(Type, Perms, Status.st_dev, Status.st_ino, Status.st_atime,
554-
Status.st_mtime, Status.st_uid, Status.st_gid,
555-
Status.st_size);
556+
Result = file_status(Type, Perms, Status.st_dev, Status.st_nlink,
557+
Status.st_ino, Status.st_atime, Status.st_mtime,
558+
Status.st_uid, Status.st_gid, Status.st_size);
556559

557560
return std::error_code();
558561
}

llvm/lib/Support/Windows/Path.inc

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,10 @@ TimePoint<> file_status::getLastModificationTime() const {
179179
return toTimePoint(Time);
180180
}
181181

182+
uint32_t file_status::getLinkCount() const {
183+
return NumLinks;
184+
}
185+
182186
std::error_code current_path(SmallVectorImpl<char> &result) {
183187
SmallVector<wchar_t, MAX_PATH> cur_path;
184188
DWORD len = MAX_PATH;
@@ -534,7 +538,8 @@ static std::error_code getStatus(HANDLE FileHandle, file_status &Result) {
534538
? (all_read | all_exe)
535539
: all_all;
536540
Result = file_status(
537-
Type, Permissions, Info.ftLastAccessTime.dwHighDateTime,
541+
Type, Permissions, Info.nNumberOfLinks,
542+
Info.ftLastAccessTime.dwHighDateTime,
538543
Info.ftLastAccessTime.dwLowDateTime,
539544
Info.ftLastWriteTime.dwHighDateTime, Info.ftLastWriteTime.dwLowDateTime,
540545
Info.dwVolumeSerialNumber, Info.nFileSizeHigh, Info.nFileSizeLow,

0 commit comments

Comments
 (0)