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:
parent
cf1f014393
commit
11ab9aa9f5
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user