On 4/26/20 8:34 PM, Carson Black wrote: > This patch splits the monolithic 'Packages (count):' output on transactions > into > multiple package outputs per category of action: 'Installing (count):', > 'Upgrading > (count):', and 'Removing (count):'. > > Signed-off-by: Carson Black <uhh...@gmail.com> > --- > src/pacman/util.c | 63 ++++++++++++++++++++++++++++++++++++----------- > 1 file changed, 48 insertions(+), 15 deletions(-) > > diff --git a/src/pacman/util.c b/src/pacman/util.c > index 6693ec75..8fdf2cea 100644 > --- a/src/pacman/util.c > +++ b/src/pacman/util.c > @@ -898,7 +898,10 @@ static void _display_targets(alpm_list_t *targets, int > verbose) > char *str; > off_t isize = 0, rsize = 0, dlsize = 0; > unsigned short cols; > - alpm_list_t *i, *names = NULL, *header = NULL, *rows = NULL; > + char *install_header; > + char *upgrade_header; > + char *remove_header;
These do need to be initialized to *something*. Set them = NULL; Without setting them to NULL, I get a crash later. > + alpm_list_t *i, *install = NULL, *upgrade = NULL, *remove = NULL, > *header = NULL, *rows = NULL; > > if(!targets) { > return; > @@ -926,38 +929,68 @@ static void _display_targets(alpm_list_t *targets, int > verbose) > rows = alpm_list_add(rows, create_verbose_row(target)); > } > > - if(target->install) { > + if(target->install && target->remove) { > + pm_asprintf(&str, "%s%s-%s%s", > alpm_pkg_get_name(target->install), config->colstr.faint, > + alpm_pkg_get_version(target->install), > config->colstr.nocolor); > + upgrade = alpm_list_add(upgrade, str); > + } else if(target->install) { > pm_asprintf(&str, "%s%s-%s%s", > alpm_pkg_get_name(target->install), config->colstr.faint, > alpm_pkg_get_version(target->install), > config->colstr.nocolor); > - } else if(isize == 0) { > + install = alpm_list_add(install, str); > + } else { > pm_asprintf(&str, "%s%s-%s%s", > alpm_pkg_get_name(target->remove), config->colstr.faint, > alpm_pkg_get_version(target->remove), > config->colstr.nocolor); > - } else { > - pm_asprintf(&str, "%s%s-%s %s[%s]%s", > alpm_pkg_get_name(target->remove), config->colstr.faint, > - alpm_pkg_get_version(target->remove), > config->colstr.nocolor, _("removal"), config->colstr.nocolor); > + remove = alpm_list_add(remove, str); > } > - names = alpm_list_add(names, str); > } > > - /* print to screen */ > - pm_asprintf(&str, "%s (%zu)", _("Packages"), alpm_list_count(targets)); > - printf("\n"); > - > cols = getcols(); > if(verbose) { > header = create_verbose_header(alpm_list_count(targets)); > if(table_display(header, rows, cols) != 0) { > /* fallback to list display if table wouldn't fit */ > - list_display(str, names, cols); > + if (alpm_list_count(install)) { > + pm_asprintf(&install_header, _("Installing > (%lu):"), alpm_list_count(install)); > + list_display(install_header, install, cols); > + } > + if (alpm_list_count(upgrade)) { > + pm_asprintf(&upgrade_header, _("Upgrading > (%lu):"), alpm_list_count(upgrade)); > + list_display(upgrade_header, upgrade, cols); > + } > + if (alpm_list_count(remove)) { > + pm_asprintf(&remove_header, _("Removing > (%lu):"), alpm_list_count(remove)); > + list_display(remove_header, remove, cols); > + } > } > } else { > - list_display(str, names, cols); > + if (alpm_list_count(install)) { > + pm_asprintf(&install_header, _("Installing (%lu):"), > alpm_list_count(install)); > + list_display(install_header, install, cols); > + if (alpm_list_count(upgrade) || > alpm_list_count(remove)) { > + printf("\n"); > + } > + } > + if (alpm_list_count(upgrade)) { > + pm_asprintf(&upgrade_header, _("Upgrading (%lu):"), > alpm_list_count(upgrade)); > + list_display(upgrade_header, upgrade, cols); > + if (alpm_list_count(remove)) { > + printf("\n"); > + } > + } > + if (alpm_list_count(remove)) { > + pm_asprintf(&remove_header, _("Removing (%lu):"), > alpm_list_count(remove)); > + list_display(remove_header, remove, cols); > + } > } > printf("\n"); > > table_free(header, rows); > - FREELIST(names); > - free(str); > + if (install) FREELIST(install); > + if (upgrade) FREELIST(upgrade); > + if (remove) FREELIST(remove); > + if (install_header) free(install_header); > + if (upgrade_header) free(upgrade_header); > + if (remove_header) free(remove_header); resolving dependencies... looking for conflicting packages... Upgrading (46): bind-tools-9.16.2-2 bluez-libs-5.54-2 checkbashisms-2.20.3-1 containerd-1.3.4-2 cryptsetup-2.3.1-2 dkms-2.8.1-2 fanficfare-3.18.0-1 firefox-developer-edition-76.0b8-1 gedit-3.36.2-1 gnome-terminal-3.36.2-1 gvim-8.2.0510-2 imagemagick-7.0.10.8-1 json-c-0.14-1 lib32-mesa-20.0.5-1 libmfx-20.1.1-1 libslirp-4.3.0-1 lilv-0.24.8-1 linux-firmware-20200421.78c0348-1 man-pages-5.06-2 meson-0.54.1-1 ndctl-68-2 perl-exporter-tiny-1.002002-1 python-distro-1.5.0-1 python-peewee-3.13.3-1 python-sphinx-3.0.3-1 python-wcwidth-0.1.9-1 python2-distro-1.5.0-1 python2-wcwidth-0.1.9-1 qbittorrent-4.2.5-1 rust-1:1.43.0-2 s-nail-14.9.19-1 serd-0.30.4-1 systemd-245.5-2 systemd-libs-245.5-2 systemd-sysvcompat-245.5-2 texinfo-6.7-3 tmux-3.1-1 tzdata-2020a-1 unzip-6.0-14 vim-runtime-8.2.0510-2 vte-common-0.60.2-1 vte3-0.60.2-1 webkit2gtk-2.28.2-1 wine-5.7-1 xapps-1.8.0-1 zip-3.0-9 Total Download Size: 88.22 MiB Total Installed Size: 1860.56 MiB Net Upgrade Size: 2.28 MiB double free or corruption (out) Aborted All I have are upgrades. > rows = NULL; > > if(dlsize > 0 || config->op_s_downloadonly) { > -- Eli Schwartz Bug Wrangler and Trusted User
signature.asc
Description: OpenPGP digital signature