summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configure.ac4
-rw-r--r--src/pacman/callback.c10
2 files changed, 12 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac
index 6916329f..c695c57f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -161,8 +161,8 @@ AC_FUNC_FORK
AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
AC_FUNC_MKTIME
AC_TYPE_SIGNAL
-AC_CHECK_FUNCS([realpath regcomp strcasecmp strdup strerror strnlen \
- strndup strrchr strsep strstr strverscmp uname geteuid])
+AC_CHECK_FUNCS([geteuid realpath regcomp strcasecmp strdup strerror \
+ strndup strrchr strsep strstr strverscmp swprintf uname])
# Enable large file support if available
AC_SYS_LARGEFILE
diff --git a/src/pacman/callback.c b/src/pacman/callback.c
index 01e65a95..a7686483 100644
--- a/src/pacman/callback.c
+++ b/src/pacman/callback.c
@@ -393,7 +393,17 @@ void cb_trans_progress(pmtransprog_t event, const char *pkgname, int percent,
len = strlen(opr) + ((pkgname) ? strlen(pkgname) : 0) + 2;
wcstr = calloc(len, sizeof(wchar_t));
/* print our strings to the alloc'ed memory */
+#if defined(HAVE_SWPRINTF)
wclen = swprintf(wcstr, len, L"%s %s", opr, pkgname);
+#else
+ /* because the format string was simple, we can easily do this without
+ * using swprintf, although it is probably not as safe/fast. The max
+ * chars we can copy is decremented each time by subtracting the length
+ * of the already printed/copied wide char string. */
+ wclen = mbstowcs(wcstr, opr, len);
+ wclen += mbstowcs(wcstr + wclen, " ", len - wclen);
+ wclen += mbstowcs(wcstr + wclen, pkgname, len - wclen);
+#endif
wcwid = wcswidth(wcstr, wclen);
padwid = textlen - wcwid;
/* if padwid is < 0, we need to trim the string so padwid = 0 */