1
0
mirror of https://github.com/moparisthebest/pacman synced 2024-12-23 08:18:51 -05:00

pacman/callback: reuse strlen calculation

Call strlen earlier in the dl progress callback, and reuse this length
to replace some heavier str*() calls with more optimized mem*()
replacements. This also gets rid of a false assumption that the ending
string will ever be longer than the original string.

Signed-off-by: Dave Reisner <dreisner@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
Dave Reisner 2011-08-30 09:24:28 -04:00 committed by Dan McGee
parent cf1f014393
commit 11ab9aa9f5

View File

@ -618,22 +618,26 @@ void cb_dl_progress(const char *filename, off_t file_xfered, off_t file_total)
eta_m = eta_s / 60; eta_m = eta_s / 60;
eta_s -= eta_m * 60; eta_s -= eta_m * 60;
/* allocate length+1 (plus null) in case we need to exchange .db for .sig */ len = strlen(filename);
fname = calloc(1, strlen(filename) + 2); fname = malloc(len + 1);
strcpy(fname, filename); memcpy(fname, filename, len);
/* strip package or DB extension for cleaner look */ /* strip package or DB extension for cleaner look */
if((p = strstr(fname, ".pkg")) || (p = strstr(fname, ".db"))) { if((p = strstr(fname, ".pkg")) || (p = strstr(fname, ".db"))) {
*p = '\0';
/* tack on a .sig suffix for signatures */ /* tack on a .sig suffix for signatures */
if((p = strstr(filename, ".sig"))) { if(memcmp(&filename[len - 4], ".sig", 4) == 0) {
strcat(fname, ".sig"); memcpy(p, ".sig", 4);
/* adjust length for later calculations */
len = p - fname + 4;
} else {
len = p - fname;
} }
} }
fname[len] = '\0';
/* 1 space + filenamelen + 1 space + 6 for size + 1 space + 3 for label + /* 1 space + filenamelen + 1 space + 6 for size + 1 space + 3 for label +
* + 2 spaces + 4 for rate + 1 for label + 2 for /s + 1 space + * + 2 spaces + 4 for rate + 1 for label + 2 for /s + 1 space +
* 8 for eta, gives us the magic 26 */ * 8 for eta, gives us the magic 30 */
filenamelen = infolen - 30; filenamelen = infolen - 30;
/* see printf() code, we omit 'HH:' in these conditions */ /* see printf() code, we omit 'HH:' in these conditions */
if(eta_h == 0 || eta_h >= 100) { if(eta_h == 0 || eta_h >= 100) {
@ -646,8 +650,7 @@ void cb_dl_progress(const char *filename, off_t file_xfered, off_t file_total)
* by the output, and then pad it accordingly so we fill the terminal. * by the output, and then pad it accordingly so we fill the terminal.
*/ */
/* len = filename len + null */ /* len = filename len + null */
len = strlen(filename) + 1; wcfname = calloc(len + 1, sizeof(wchar_t));
wcfname = calloc(len, sizeof(wchar_t));
wclen = mbstowcs(wcfname, fname, len); wclen = mbstowcs(wcfname, fname, len);
wcwid = wcswidth(wcfname, wclen); wcwid = wcswidth(wcfname, wclen);
padwid = filenamelen - wcwid; padwid = filenamelen - wcwid;