[pacman-dev] Add a utility function to check whether a file exists in the cache

Message ID 20200424044137.33995-1-anatol.pomozov@gmail.com
State Superseded, archived
Headers show
Series [pacman-dev] Add a utility function to check whether a file exists in the cache | expand

Commit Message

Anatol Pomozov April 24, 2020, 4:41 a.m. UTC
It is similar to _alpm_filecache_find() but does not return a
dynamically allocated memory to user. Thus the user does not need to
free this resource.

Signed-off-by: Anatol Pomozov <anatol.pomozov@gmail.com>
---
 lib/libalpm/util.c | 14 ++++++++++++++
 lib/libalpm/util.h |  2 ++
 2 files changed, 16 insertions(+)

Comments

Allan McRae April 27, 2020, 1:07 a.m. UTC | #1
On 24/4/20 2:41 pm, Anatol Pomozov wrote:
> It is similar to _alpm_filecache_find() but does not return a
> dynamically allocated memory to user. Thus the user does not need to
> free this resource.
> 
> Signed-off-by: Anatol Pomozov <anatol.pomozov@gmail.com>
> ---
>  lib/libalpm/util.c | 14 ++++++++++++++
>  lib/libalpm/util.h |  2 ++
>  2 files changed, 16 insertions(+)
> 
> diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c
> index cb838e43..6307dc14 100644
> --- a/lib/libalpm/util.c
> +++ b/lib/libalpm/util.c
> @@ -834,6 +834,20 @@ char *_alpm_filecache_find(alpm_handle_t *handle, const char *filename)
>  	return NULL;
>  }
>  
> +/** Check whether a filename exists in a registered alpm cachedir.
> + * @param handle the context handle
> + * @param filename name of file to find
> + * @return 0 if the filename was not found, 1 otherwise
> + */
> +int _alpm_filecache_exists(alpm_handle_t *handle, const char *filename)
> +{
> +	int res;
> +	char *fpath = _alpm_filecache_find(handle, filename);
> +	res = !!fpath;

Please adjust:

res = (fpath != NULL)

This follows from our style guideline (although not explicitly stated)

6.  When using strcmp() (or any function that returns 0 on success) in a
    conditional statement, use != 0 or == 0 and not the negation (!)
    operator.


I'm also assuming that this function will not be used in such a way that
_alpm_filecache_find will be called again if it exists...

Allan
Anatol Pomozov April 27, 2020, 2:13 a.m. UTC | #2
Hi

On Sun, Apr 26, 2020 at 6:07 PM Allan McRae <allan@archlinux.org> wrote:
>
> On 24/4/20 2:41 pm, Anatol Pomozov wrote:
> > It is similar to _alpm_filecache_find() but does not return a
> > dynamically allocated memory to user. Thus the user does not need to
> > free this resource.
> >
> > Signed-off-by: Anatol Pomozov <anatol.pomozov@gmail.com>
> > ---
> >  lib/libalpm/util.c | 14 ++++++++++++++
> >  lib/libalpm/util.h |  2 ++
> >  2 files changed, 16 insertions(+)
> >
> > diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c
> > index cb838e43..6307dc14 100644
> > --- a/lib/libalpm/util.c
> > +++ b/lib/libalpm/util.c
> > @@ -834,6 +834,20 @@ char *_alpm_filecache_find(alpm_handle_t *handle, const char *filename)
> >       return NULL;
> >  }
> >
> > +/** Check whether a filename exists in a registered alpm cachedir.
> > + * @param handle the context handle
> > + * @param filename name of file to find
> > + * @return 0 if the filename was not found, 1 otherwise
> > + */
> > +int _alpm_filecache_exists(alpm_handle_t *handle, const char *filename)
> > +{
> > +     int res;
> > +     char *fpath = _alpm_filecache_find(handle, filename);
> > +     res = !!fpath;
>
> Please adjust:
>
> res = (fpath != NULL)
>
> This follows from our style guideline (although not explicitly stated)
>
> 6.  When using strcmp() (or any function that returns 0 on success) in a
>     conditional statement, use != 0 or == 0 and not the negation (!)
>     operator.

Done.

> I'm also assuming that this function will not be used in such a way that
> _alpm_filecache_find will be called again if it exists...

Correct. The added function should not be used in conjunction with
_alpm_filecache_find() like you described.

Patch

diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c
index cb838e43..6307dc14 100644
--- a/lib/libalpm/util.c
+++ b/lib/libalpm/util.c
@@ -834,6 +834,20 @@  char *_alpm_filecache_find(alpm_handle_t *handle, const char *filename)
 	return NULL;
 }
 
+/** Check whether a filename exists in a registered alpm cachedir.
+ * @param handle the context handle
+ * @param filename name of file to find
+ * @return 0 if the filename was not found, 1 otherwise
+ */
+int _alpm_filecache_exists(alpm_handle_t *handle, const char *filename)
+{
+	int res;
+	char *fpath = _alpm_filecache_find(handle, filename);
+	res = !!fpath;
+	FREE(fpath);
+	return res;
+}
+
 /** Check the alpm cachedirs for existence and find a writable one.
  * If no valid cache directory can be found, use /tmp.
  * @param handle the context handle
diff --git a/lib/libalpm/util.h b/lib/libalpm/util.h
index 3306a022..4fc6e718 100644
--- a/lib/libalpm/util.h
+++ b/lib/libalpm/util.h
@@ -136,6 +136,8 @@  int _alpm_run_chroot(alpm_handle_t *handle, const char *cmd, char *const argv[],
 int _alpm_ldconfig(alpm_handle_t *handle);
 int _alpm_str_cmp(const void *s1, const void *s2);
 char *_alpm_filecache_find(alpm_handle_t *handle, const char *filename);
+/* Checks whether a file exists in cache */
+int _alpm_filecache_exists(alpm_handle_t *handle, const char *filename);
 const char *_alpm_filecache_setup(alpm_handle_t *handle);
 /* Unlike many uses of alpm_pkgvalidation_t, _alpm_test_checksum expects
  * an enum value rather than a bitfield. */