Add wrapper around asprintf calls
Not checking the return value of asprintf calls reuslts in a warning when using -D_FORTIRFY_SOURCE=2. This adds a simple wrapper around asprintf calls which checks the return value. Currently the check does nothing more than outputing a message to stderr on failure, but that is at least an improvement over silent failures. Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
parent
879fed5098
commit
28c662e7a4
2 changed files with 28 additions and 11 deletions
|
@ -531,10 +531,10 @@ void display_targets(const alpm_list_t *pkgs, int install)
|
||||||
double mbsize = 0.0;
|
double mbsize = 0.0;
|
||||||
mbsize = alpm_pkg_get_size(pkg) / (1024.0 * 1024.0);
|
mbsize = alpm_pkg_get_size(pkg) / (1024.0 * 1024.0);
|
||||||
|
|
||||||
asprintf(&str, "%s-%s [%.2f MB]", alpm_pkg_get_name(pkg),
|
pm_asprintf(&str, "%s-%s [%.2f MB]", alpm_pkg_get_name(pkg),
|
||||||
alpm_pkg_get_version(pkg), mbsize);
|
alpm_pkg_get_version(pkg), mbsize);
|
||||||
} else {
|
} else {
|
||||||
asprintf(&str, "%s-%s", alpm_pkg_get_name(pkg),
|
pm_asprintf(&str, "%s-%s", alpm_pkg_get_name(pkg),
|
||||||
alpm_pkg_get_version(pkg));
|
alpm_pkg_get_version(pkg));
|
||||||
}
|
}
|
||||||
targets = alpm_list_add(targets, str);
|
targets = alpm_list_add(targets, str);
|
||||||
|
@ -545,7 +545,7 @@ void display_targets(const alpm_list_t *pkgs, int install)
|
||||||
mbisize = isize / (1024.0 * 1024.0);
|
mbisize = isize / (1024.0 * 1024.0);
|
||||||
|
|
||||||
if(install) {
|
if(install) {
|
||||||
asprintf(&str, _("Targets (%d):"), alpm_list_count(targets));
|
pm_asprintf(&str, _("Targets (%d):"), alpm_list_count(targets));
|
||||||
list_display(str, targets);
|
list_display(str, targets);
|
||||||
free(str);
|
free(str);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
@ -555,7 +555,7 @@ void display_targets(const alpm_list_t *pkgs, int install)
|
||||||
printf(_("Total Installed Size: %.2f MB\n"), mbisize);
|
printf(_("Total Installed Size: %.2f MB\n"), mbisize);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
asprintf(&str, _("Remove (%d):"), alpm_list_count(targets));
|
pm_asprintf(&str, _("Remove (%d):"), alpm_list_count(targets));
|
||||||
list_display(str, targets);
|
list_display(str, targets);
|
||||||
free(str);
|
free(str);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
@ -589,14 +589,14 @@ static char *pkg_get_location(pmpkg_t *pkg)
|
||||||
dburl = alpm_db_get_url(db);
|
dburl = alpm_db_get_url(db);
|
||||||
if(dburl) {
|
if(dburl) {
|
||||||
char *pkgurl = NULL;
|
char *pkgurl = NULL;
|
||||||
asprintf(&pkgurl, "%s/%s", dburl, alpm_pkg_get_filename(pkg));
|
pm_asprintf(&pkgurl, "%s/%s", dburl, alpm_pkg_get_filename(pkg));
|
||||||
return(pkgurl);
|
return(pkgurl);
|
||||||
}
|
}
|
||||||
case PM_OP_UPGRADE:
|
case PM_OP_UPGRADE:
|
||||||
return(strdup(alpm_pkg_get_filename(pkg)));
|
return(strdup(alpm_pkg_get_filename(pkg)));
|
||||||
default:
|
default:
|
||||||
string = NULL;
|
string = NULL;
|
||||||
asprintf(&string, "%s-%s", alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg));
|
pm_asprintf(&string, "%s-%s", alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg));
|
||||||
return(string);
|
return(string);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -647,7 +647,7 @@ void print_packages(const alpm_list_t *packages)
|
||||||
char *size;
|
char *size;
|
||||||
double mbsize = 0.0;
|
double mbsize = 0.0;
|
||||||
mbsize = pkg_get_size(pkg) / (1024.0 * 1024.0);
|
mbsize = pkg_get_size(pkg) / (1024.0 * 1024.0);
|
||||||
asprintf(&size, "%.2f", mbsize);
|
pm_asprintf(&size, "%.2f", mbsize);
|
||||||
string = strreplace(temp, "%s", size);
|
string = strreplace(temp, "%s", size);
|
||||||
free(size);
|
free(size);
|
||||||
free(temp);
|
free(temp);
|
||||||
|
@ -777,6 +777,22 @@ int pm_fprintf(FILE *stream, pmloglevel_t level, const char *format, ...)
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int pm_asprintf(char **string, const char *format, ...)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
va_list args;
|
||||||
|
|
||||||
|
/* print the message using va_arg list */
|
||||||
|
va_start(args, format);
|
||||||
|
if(vasprintf(string, format, args) == -1) {
|
||||||
|
pm_fprintf(stderr, PM_LOG_ERROR, _("failed to allocate string\n"));
|
||||||
|
ret = -1;
|
||||||
|
}
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
|
||||||
int pm_vasprintf(char **string, pmloglevel_t level, const char *format, va_list args)
|
int pm_vasprintf(char **string, pmloglevel_t level, const char *format, va_list args)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
@ -793,16 +809,16 @@ int pm_vasprintf(char **string, pmloglevel_t level, const char *format, va_list
|
||||||
/* print a prefix to the message */
|
/* print a prefix to the message */
|
||||||
switch(level) {
|
switch(level) {
|
||||||
case PM_LOG_DEBUG:
|
case PM_LOG_DEBUG:
|
||||||
asprintf(string, "debug: %s", msg);
|
pm_asprintf(string, "debug: %s", msg);
|
||||||
break;
|
break;
|
||||||
case PM_LOG_ERROR:
|
case PM_LOG_ERROR:
|
||||||
asprintf(string, _("error: %s"), msg);
|
pm_asprintf(string, _("error: %s"), msg);
|
||||||
break;
|
break;
|
||||||
case PM_LOG_WARNING:
|
case PM_LOG_WARNING:
|
||||||
asprintf(string, _("warning: %s"), msg);
|
pm_asprintf(string, _("warning: %s"), msg);
|
||||||
break;
|
break;
|
||||||
case PM_LOG_FUNCTION:
|
case PM_LOG_FUNCTION:
|
||||||
asprintf(string, _("function: %s"), msg);
|
pm_asprintf(string, _("function: %s"), msg);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -62,6 +62,7 @@ int yesno(char *fmt, ...);
|
||||||
int noyes(char *fmt, ...);
|
int noyes(char *fmt, ...);
|
||||||
int pm_printf(pmloglevel_t level, const char *format, ...) __attribute__((format(printf,2,3)));
|
int pm_printf(pmloglevel_t level, const char *format, ...) __attribute__((format(printf,2,3)));
|
||||||
int pm_fprintf(FILE *stream, pmloglevel_t level, const char *format, ...) __attribute__((format(printf,3,4)));
|
int pm_fprintf(FILE *stream, pmloglevel_t level, const char *format, ...) __attribute__((format(printf,3,4)));
|
||||||
|
int pm_asprintf(char **string, const char *format, ...);
|
||||||
int pm_vfprintf(FILE *stream, pmloglevel_t level, const char *format, va_list args) __attribute__((format(printf,3,0)));
|
int pm_vfprintf(FILE *stream, pmloglevel_t level, const char *format, va_list args) __attribute__((format(printf,3,0)));
|
||||||
int pm_vasprintf(char **string, pmloglevel_t level, const char *format, va_list args) __attribute__((format(printf,3,0)));
|
int pm_vasprintf(char **string, pmloglevel_t level, const char *format, va_list args) __attribute__((format(printf,3,0)));
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue