[pacman-dev] [PATCH v3 2/2] src/pacman/query.c: do not exit -Qo with error if file does not exist

Andrew Gregory andrew.gregory.8 at gmail.com
Thu Jan 25 15:22:29 UTC 2018


On 01/24/18 at 07:20pm, iff at escondida.tk wrote:
> From: Ivy Foster <iff at escondida.tk>
> 
> Query operations act on the local db, not the filesystem. Also, a
> valid use case for -Qo is to discover what package owns a deleted file
> so it can be reinstalled.
> 
> Closes FS#55856.
> 
> Signed-off-by: Ivy Foster <iff at escondida.tk>
> ---
> My apologies for missing the earlier patch's problems with missing
> dirs. Frankly, I don't know how I missed it. This one really,
> honest-to-goodness *does* find missing dirs, as long the user passes
> the dirname with a slash at the end, as well as missing files. Enjoy!
> 
>  src/pacman/query.c | 24 +++++++++---------------
>  1 file changed, 9 insertions(+), 15 deletions(-)
> 
> diff --git a/src/pacman/query.c b/src/pacman/query.c
> index 91ca78a7..39f8dabf 100644
> --- a/src/pacman/query.c
> +++ b/src/pacman/query.c

...

> @@ -206,7 +200,7 @@ static int query_fileowner(alpm_list_t *targets)
>  
>  		rel_path = rpath + rootlen;
>  
> -		if((is_dir = S_ISDIR(buf.st_mode))) {
> +		if((is_missing && is_dir) || (is_dir = S_ISDIR(buf.st_mode))) {
>  			size_t rlen = strlen(rpath);
>  			if(rlen + 2 >= PATH_MAX) {
>  					pm_printf(ALPM_LOG_ERROR, _("path too long: %s/\n"), rpath);

The call to S_ISDIR needs to be moved up with the stat call(s) in
a branch where we know the stat succeeded.  If the file does not exist
the calls to stat will fail and buf.st_mode will be uninitialized.

apg


More information about the pacman-dev mailing list