mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-22 04:25:18 +00:00
virfile: Introduce virDirIsEmpty()
There might be cases where we want to know whether given directory is empty or not. Introduce a helper for that: virDirIsEmpty(). Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
ac9c9b621f
commit
1b33578854
@ -2271,6 +2271,7 @@ safezero;
|
||||
virBuildPathInternal;
|
||||
virDirClose;
|
||||
virDirCreate;
|
||||
virDirIsEmpty;
|
||||
virDirOpen;
|
||||
virDirOpenIfExists;
|
||||
virDirOpenQuiet;
|
||||
|
@ -3036,6 +3036,45 @@ void virDirClose(DIR *dirp)
|
||||
closedir(dirp); /* exempt from syntax-check */
|
||||
}
|
||||
|
||||
/**
|
||||
* virDirIsEmpty:
|
||||
* @path: path to the directory
|
||||
* @hidden: whether hidden files matter
|
||||
*
|
||||
* Check whether given directory (@path) is empty, i.e. it
|
||||
* contains just the usual entries '.' and '..'. Hidden files are
|
||||
* ignored unless @hidden is true. IOW, a directory containing
|
||||
* nothing but hidden files is considered empty if @hidden is
|
||||
* false and not empty if @hidden is true.
|
||||
*
|
||||
* Returns: 1 if the directory is empty,
|
||||
* 0 if the directory is not empty,
|
||||
* -1 otherwise (no error reported).
|
||||
*/
|
||||
int virDirIsEmpty(const char *path,
|
||||
bool hidden)
|
||||
{
|
||||
g_autoptr(DIR) dir = NULL;
|
||||
struct dirent *ent;
|
||||
int direrr;
|
||||
|
||||
if (virDirOpenQuiet(&dir, path) < 0)
|
||||
return -1;
|
||||
|
||||
while ((direrr = virDirRead(dir, &ent, NULL)) > 0) {
|
||||
/* virDirRead() skips over '.' and '..' so here we have
|
||||
* actual directory entry. */
|
||||
if (!hidden ||
|
||||
(hidden && ent->d_name[0] != '.'))
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (direrr < 0)
|
||||
return -1;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* virFileChownFiles:
|
||||
|
@ -283,6 +283,9 @@ int virDirRead(DIR *dirp, struct dirent **ent, const char *dirname)
|
||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT;
|
||||
void virDirClose(DIR *dirp);
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(DIR, virDirClose);
|
||||
int virDirIsEmpty(const char *path,
|
||||
bool hidden)
|
||||
ATTRIBUTE_NONNULL(1) G_GNUC_WARN_UNUSED_RESULT;
|
||||
|
||||
int virFileMakeParentPath(const char *path) G_GNUC_WARN_UNUSED_RESULT;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user