util: new function virFileLength()

This new function just calls fstat() (if provided with a valid fd) or
stat() (if fd is -1) and returns st_size (or -1 if there is an
error). We may decide we want this function to be more complex, and
handle things like block devices - this is a placeholder (that works)
for any more complicated function.
This commit is contained in:
Laine Stump 2016-11-17 12:18:27 -05:00
parent 943ddcb712
commit e026563f01
3 changed files with 36 additions and 0 deletions

View File

@ -1578,6 +1578,7 @@ virFileIsLink;
virFileIsMountPoint; virFileIsMountPoint;
virFileIsSharedFS; virFileIsSharedFS;
virFileIsSharedFSType; virFileIsSharedFSType;
virFileLength;
virFileLinkPointsTo; virFileLinkPointsTo;
virFileLock; virFileLock;
virFileLoopDeviceAssociate; virFileLoopDeviceAssociate;

View File

@ -1735,6 +1735,40 @@ virFileActivateDirOverride(const char *argv0)
} }
} }
/**
* virFileLength:
* @path: full path of the file
* @fd: open file descriptor for file (or -1 to use @path)
*
* If fd >= 0, return the length of the open file indicated by @fd.
* If fd < 0 (i.e. -1) return the length of the file indicated by
* @path.
*
* Returns the length, or -1 if the file doesn't
* exist or its info was inaccessible. No error is logged.
*/
off_t
virFileLength(const char *path, int fd)
{
struct stat s;
if (fd >= 0) {
if (fstat(fd, &s) < 0)
return -1;
} else {
if (stat(path, &s) < 0)
return -1;
}
if (!S_ISREG(s.st_mode))
return -1;
return s.st_size;
}
bool bool
virFileIsDir(const char *path) virFileIsDir(const char *path)
{ {

View File

@ -179,6 +179,7 @@ char *virFileFindResourceFull(const char *filename,
void virFileActivateDirOverride(const char *argv0) void virFileActivateDirOverride(const char *argv0)
ATTRIBUTE_NONNULL(1); ATTRIBUTE_NONNULL(1);
off_t virFileLength(const char *path, int fd) ATTRIBUTE_NONNULL(1);
bool virFileIsDir (const char *file) ATTRIBUTE_NONNULL(1); bool virFileIsDir (const char *file) ATTRIBUTE_NONNULL(1);
bool virFileExists(const char *file) ATTRIBUTE_NONNULL(1); bool virFileExists(const char *file) ATTRIBUTE_NONNULL(1);
bool virFileIsExecutable(const char *file) ATTRIBUTE_NONNULL(1); bool virFileIsExecutable(const char *file) ATTRIBUTE_NONNULL(1);