[pacman-dev] [PATCH] Sort short options before long options in --help

Nagy Gabor ngaba at bibl.u-szeged.hu
Thu Oct 14 07:55:36 EDT 2010


> $ pacman -Uh
> options:
>   -b, --dbpath <path>  set an alternate database location
>   -d, --nodeps         skip dependency checks
>   -f, --force          force install, overwrite conflicting files
>   -k, --dbonly         only modify database entries, not package files
>   -r, --root <path>    set an alternate installation root
>   -v, --verbose        be verbose
>       --arch <arch>    set an alternate architecture
>       --asdeps         install packages as non-explicitly installed
>       --asexplicit     install packages as explicitly installed
>       --cachedir <dir> set an alternate package cache location
>       --config <path>  set an alternate configuration file
>       --debug          display debug messages
>       --ignore <pkg>   ignore a package upgrade (can be used more than once)
>       --ignoregroup <grp>
>                        ignore a group upgrade (can be used more than once)
>       --logfile <path> set an alternate log file
>       --noconfirm      do not ask for any confirmation
>       --noprogressbar  do not show a progress bar when downloading files
>       --noscriptlet    do not execute the install scriptlet if one exists
>       --print          only print the targets instead of performing the operation
>       --print-format <string>
>                        specify how the targets should be printed
> 
> Signed-off-by: Xavier Chantry <chantry.xavier at gmail.com>

I like this.

> +/* Used to sort the options in --help */
> +static int options_cmp(const void *p1, const void *p2)
> +{
> +	const char *s1 = p1;
> +	const char *s2 = p2;
> +	int ret = 0;
> +
> +	/* First skip all spaces in both strings */
> +	while(isspace((unsigned char)*s1))
> +		s1++;
> +	while(isspace((unsigned char)*s2))
> +		s2++;
> +	/* If we compare a long option (--abcd) and a short one (-a),
> +	 * the short one always wins */
> +	if (*(s1+1) != '-' && *(s2+1) == '-') {
> +		ret = -1;

I hope you don't pass invalid string arguments (e.g. empty string),
otherwise we can get a segfault here.

> +	} else if (*(s2+1) != '-' && *(s1+1) == '-') {
> +		ret = 1;
> +	} else {
> +		ret = strcmp(s1, s2);
> +	}
> +	return(ret);
> +}

NG




More information about the pacman-dev mailing list