mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-28 11:21:44 +03:00
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:
parent
943ddcb712
commit
e026563f01
@ -1578,6 +1578,7 @@ virFileIsLink;
|
||||
virFileIsMountPoint;
|
||||
virFileIsSharedFS;
|
||||
virFileIsSharedFSType;
|
||||
virFileLength;
|
||||
virFileLinkPointsTo;
|
||||
virFileLock;
|
||||
virFileLoopDeviceAssociate;
|
||||
|
@ -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
|
||||
virFileIsDir(const char *path)
|
||||
{
|
||||
|
@ -179,6 +179,7 @@ char *virFileFindResourceFull(const char *filename,
|
||||
void virFileActivateDirOverride(const char *argv0)
|
||||
ATTRIBUTE_NONNULL(1);
|
||||
|
||||
off_t virFileLength(const char *path, int fd) ATTRIBUTE_NONNULL(1);
|
||||
bool virFileIsDir (const char *file) ATTRIBUTE_NONNULL(1);
|
||||
bool virFileExists(const char *file) ATTRIBUTE_NONNULL(1);
|
||||
bool virFileIsExecutable(const char *file) ATTRIBUTE_NONNULL(1);
|
||||
|
Loading…
Reference in New Issue
Block a user