Add compat code for missing wcwidth.
If we don't have wcwidth force fallback implementations of nl_langinfo and mbtowc. Based on advice from Ingo Schwarze.
This commit is contained in:
parent
8aaec70506
commit
a233358417
|
@ -1721,7 +1721,6 @@ AC_CHECK_FUNCS([ \
|
||||||
inet_ntop \
|
inet_ntop \
|
||||||
innetgr \
|
innetgr \
|
||||||
login_getcapbool \
|
login_getcapbool \
|
||||||
mblen \
|
|
||||||
md5_crypt \
|
md5_crypt \
|
||||||
memmove \
|
memmove \
|
||||||
memset_s \
|
memset_s \
|
||||||
|
@ -1789,6 +1788,12 @@ AC_CHECK_FUNCS([ \
|
||||||
warn \
|
warn \
|
||||||
])
|
])
|
||||||
|
|
||||||
|
dnl Wide character support. Linux man page says it needs _XOPEN_SOURCE.
|
||||||
|
saved_CFLAGS="$CFLAGS"
|
||||||
|
CFLAGS="$CFLAGS -D_XOPEN_SOURCE"
|
||||||
|
AC_CHECK_FUNCS([mblen mbtowc nl_langinfo wcwidth])
|
||||||
|
CFLAGS="$saved_CFLAGS"
|
||||||
|
|
||||||
AC_LINK_IFELSE(
|
AC_LINK_IFELSE(
|
||||||
[AC_LANG_PROGRAM(
|
[AC_LANG_PROGRAM(
|
||||||
[[ #include <ctype.h> ]],
|
[[ #include <ctype.h> ]],
|
||||||
|
|
|
@ -284,3 +284,20 @@ pledge(const char *promises, const char *paths[])
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_MBTOWC
|
||||||
|
/* a mbtowc that only supports ASCII */
|
||||||
|
int
|
||||||
|
mbtowc(wchar_t *pwc, const char *s, size_t n)
|
||||||
|
{
|
||||||
|
if (s == NULL || *s == '\0')
|
||||||
|
return 0; /* ASCII is not state-dependent */
|
||||||
|
if (*s < 0 || *s > 0x7f || n < 1) {
|
||||||
|
errno = EOPNOTSUPP;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (pwc != NULL)
|
||||||
|
*pwc = *s;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -36,6 +36,8 @@
|
||||||
|
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
|
||||||
|
#include <stddef.h> /* for wchar_t */
|
||||||
|
|
||||||
/* OpenBSD function replacements */
|
/* OpenBSD function replacements */
|
||||||
#include "base64.h"
|
#include "base64.h"
|
||||||
#include "sigact.h"
|
#include "sigact.h"
|
||||||
|
@ -231,6 +233,22 @@ long long strtonum(const char *, long long, long long, const char **);
|
||||||
# define mblen(x, y) (1)
|
# define mblen(x, y) (1)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_WCWIDTH
|
||||||
|
# define wcwidth(x) (((x) >= 0x20 && (x) <= 0x7e) ? 1 : -1)
|
||||||
|
/* force our no-op nl_langinfo and mbtowc */
|
||||||
|
# undef HAVE_NL_LANGINFO
|
||||||
|
# undef HAVE_MBTOWC
|
||||||
|
# undef HAVE_LANGINFO_H
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_NL_LANGINFO
|
||||||
|
# define nl_langinfo(x) ""
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_MBTOWC
|
||||||
|
int mbtowc(wchar_t *, const char*, size_t);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if !defined(HAVE_VASPRINTF) || !defined(HAVE_VSNPRINTF)
|
#if !defined(HAVE_VASPRINTF) || !defined(HAVE_VSNPRINTF)
|
||||||
# include <stdarg.h>
|
# include <stdarg.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue