summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2008-04-07 18:36:18 -0500
committerDan McGee <dan@archlinux.org>2008-04-07 19:09:46 -0500
commitbec2ba5b4005053ce8f7048fa825ed58e3adfdc2 (patch)
tree30be07c6ff6626f984690649335ed1fc4152e6e2 /src
parent9441fba12430f568b8b7456fcbe54d4c8a42d24d (diff)
downloadpacman-bec2ba5b4005053ce8f7048fa825ed58e3adfdc2.tar.xz
Add check for swprintf() and a workaround when it is missing
We use this function once in our codebase, but fortunately the workaround is relatively easy. swprintf() is not available on Cygwin so the compile failed there, but we can do a series of mbstowcs() calls that produce the same end result as the swprintf() call. Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'src')
-rw-r--r--src/pacman/callback.c10
1 files changed, 10 insertions, 0 deletions
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 */