Re: [PATCH 07/18] Add virDirOpenIfExists

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 06/21/2016 12:05 PM, Ján Tomko wrote:
> Just like virDirOpen, but it returns 0 without reporting an error
> on ENOENT.
> ---
>  src/libvirt_private.syms |  1 +
>  src/util/virfile.c       | 21 +++++++++++++++++++--
>  src/util/virfile.h       |  2 ++
>  3 files changed, 22 insertions(+), 2 deletions(-)
> 
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index 457fe19..2bb1d95 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -1496,6 +1496,7 @@ virBuildPathInternal;
>  virDirClose;
>  virDirCreate;
>  virDirOpen;
> +virDirOpenIfExists;
>  virDirRead;
>  virFileAbsPath;
>  virFileAccessibleAs;
> diff --git a/src/util/virfile.c b/src/util/virfile.c
> index 7dee3d9..efdb98b 100644
> --- a/src/util/virfile.c
> +++ b/src/util/virfile.c
> @@ -2727,10 +2727,12 @@ virFileRemove(const char *path,
>  #endif /* WIN32 */
>  
>  static int
> -virDirOpenInternal(DIR **dirp, const char *name)
> +virDirOpenInternal(DIR **dirp, const char *name, bool ignoreENOENT)
>  {
>      *dirp = opendir(name);
>      if (!*dirp) {
> +        if (ignoreENOENT && errno == ENOENT)
> +            return 0;


Why not pass "ignore_errno" as an int and compare errno against it... I
would think passing 0 otherwise would work unless open

What you have works and is fine and ENOENT is the errno du jour to
check, but just trying to future proof adding yet another argument.

ACK to what's here - this is only a suggestion...

John
>          virReportSystemError(errno, _("cannot open directory '%s'"), name);
>          return -1;
>      }
> @@ -2748,7 +2750,22 @@ virDirOpenInternal(DIR **dirp, const char *name)
>  int
>  virDirOpen(DIR **dirp, const char *name)
>  {
> -    return virDirOpenInternal(dirp, name);
> +    return virDirOpenInternal(dirp, name, false);
> +}
> +
> +/**
> + * virDirOpenIfExists
> + * @dirp: directory stream
> + * @name: path of the directory
> + *
> + * Returns 1 on success.
> + * If opendir returns ENOENT, 0 is returned without reporting an error.
> + * On other errors, -1 is returned and an error is reported.
> + */
> +int
> +virDirOpenIfExists(DIR **dirp, const char *name)
> +{
> +    return virDirOpenInternal(dirp, name, true);
>  }
>  
>  /**
> diff --git a/src/util/virfile.h b/src/util/virfile.h
> index c618842..42c65f2 100644
> --- a/src/util/virfile.h
> +++ b/src/util/virfile.h
> @@ -232,6 +232,8 @@ int virDirCreate(const char *path, mode_t mode, uid_t uid, gid_t gid,
>                   unsigned int flags) ATTRIBUTE_RETURN_CHECK;
>  int virDirOpen(DIR **dirp, const char *dirname)
>      ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
> +int virDirOpenIfExists(DIR **dirp, const char *dirname)
> +    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
>  int virDirRead(DIR *dirp, struct dirent **ent, const char *dirname)
>      ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
>  void virDirClose(DIR **dirp)
> 

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]