[pacman-dev] [PATCH 2/2] libalpm: Add accessors for the base field

Allan McRae allan at archlinux.org
Mon Dec 22 05:53:26 UTC 2014


On 21/12/14 02:25, Johannes Löthberg wrote:
> This commit adds the necessary accessor functions to get the PKGBASE of
> a package, forcing the desc file to be parsed.
> 
> Signed-off-by: Johannes Löthberg <johannes at kyriasis.com>
> ---
>  lib/libalpm/alpm.h     | 6 ++++++
>  lib/libalpm/be_local.c | 7 +++++++
>  lib/libalpm/package.c  | 9 +++++++++
>  lib/libalpm/package.h  | 1 +
>  4 files changed, 23 insertions(+)

Are we expecting a third patch to actually do something with this?
Maybe something like:

$ pacman -Si gcc-libs
Repository     : core
Name           : gcc-libs (gcc)
Version        : 4.9.2-1

> 
> diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
> index e6ef3ae..91b9461 100644
> --- a/lib/libalpm/alpm.h
> +++ b/lib/libalpm/alpm.h
> @@ -1101,6 +1101,12 @@ int alpm_pkg_should_ignore(alpm_handle_t *handle, alpm_pkg_t *pkg);
>   */
>  const char *alpm_pkg_get_filename(alpm_pkg_t *pkg);
>  
> +/** Returns the package base name.
> + * @param pkg a pointer to package
> + * @return a reference to an internal string
> + */
> +const char *alpm_pkg_get_base(alpm_pkg_t *pkg);
> +

OK - see my new rule about adding this change to README.  Give that was
posted after you submitted this, I can handle it.

>  /** Returns the package name.
>   * @param pkg a pointer to package
>   * @return a reference to an internal string
> diff --git a/lib/libalpm/be_local.c b/lib/libalpm/be_local.c
> index 54d3099..dbdfc99 100644
> --- a/lib/libalpm/be_local.c
> +++ b/lib/libalpm/be_local.c
> @@ -63,6 +63,12 @@ static int local_db_read(alpm_pkg_t *info, alpm_dbinfrq_t inforeq);
>   * initialized.
>   */
>  
> +static const char *_cache_get_base(alpm_pkg_t *pkg)
> +{
> +	LAZY_LOAD(INFRQ_DESC, NULL);
> +	return pkg->base;
> +}
> +

OK

>  static const char *_cache_get_desc(alpm_pkg_t *pkg)
>  {
>  	LAZY_LOAD(INFRQ_DESC, NULL);
> @@ -297,6 +303,7 @@ static int _cache_force_load(alpm_pkg_t *pkg)
>   * logic.
>   */
>  static struct pkg_operations local_pkg_ops = {
> +	.get_base        = _cache_get_base,
>  	.get_desc        = _cache_get_desc,
>  	.get_url         = _cache_get_url,
>  	.get_builddate   = _cache_get_builddate,

OK

> diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c
> index e2997f6..92fcb2a 100644
> --- a/lib/libalpm/package.c
> +++ b/lib/libalpm/package.c
> @@ -83,6 +83,7 @@ int SYMEXPORT alpm_pkg_checkmd5sum(alpm_pkg_t *pkg)
>   * backend logic that needs lazy access, such as the local database through
>   * a lazy-load cache. However, the defaults will work just fine for fully-
>   * populated package structures. */
> +static const char *_pkg_get_base(alpm_pkg_t *pkg)        { return pkg->base; }

OK

>  static const char *_pkg_get_desc(alpm_pkg_t *pkg)        { return pkg->desc; }
>  static const char *_pkg_get_url(alpm_pkg_t *pkg)         { return pkg->url; }
>  static alpm_time_t _pkg_get_builddate(alpm_pkg_t *pkg)   { return pkg->builddate; }
> @@ -144,6 +145,7 @@ static int _pkg_force_load(alpm_pkg_t UNUSED *pkg) { return 0; }
>   * struct itself with no abstraction layer or any type of lazy loading.
>   */
>  struct pkg_operations default_pkg_ops = {
> +	.get_base        = _pkg_get_base,

OK

>  	.get_desc        = _pkg_get_desc,
>  	.get_url         = _pkg_get_url,
>  	.get_builddate   = _pkg_get_builddate,
> @@ -186,6 +188,13 @@ const char SYMEXPORT *alpm_pkg_get_filename(alpm_pkg_t *pkg)
>  	return pkg->filename;
>  }
>  
> +const char SYMEXPORT *alpm_pkg_get_base(alpm_pkg_t *pkg)
> +{
> +	ASSERT(pkg != NULL, return NULL);
> +	pkg->handle->pm_errno = 0;
> +	return pkg->ops->get_base(pkg);
> +}
> +

OK.

>  const char SYMEXPORT *alpm_pkg_get_name(alpm_pkg_t *pkg)
>  {
>  	ASSERT(pkg != NULL, return NULL);
> diff --git a/lib/libalpm/package.h b/lib/libalpm/package.h
> index 98c1e6d..5ab9b20 100644
> --- a/lib/libalpm/package.h
> +++ b/lib/libalpm/package.h
> @@ -43,6 +43,7 @@
>   * defined default_pkg_ops struct to work just fine for their needs.
>   */
>  struct pkg_operations {
> +	const char *(*get_base) (alpm_pkg_t *);

OK.

>  	const char *(*get_desc) (alpm_pkg_t *);
>  	const char *(*get_url) (alpm_pkg_t *);
>  	alpm_time_t (*get_builddate) (alpm_pkg_t *);
> 


More information about the pacman-dev mailing list