projects
/
mmh
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Whoops, forgot to bracket the calls for TLS shutdown with a #ifdef TLS_SUPPORT
[mmh]
/
sbr
/
fmt_scan.c
diff --git
a/sbr/fmt_scan.c
b/sbr/fmt_scan.c
index
b27f7c6
..
9054963
100644
(file)
--- a/
sbr/fmt_scan.c
+++ b/
sbr/fmt_scan.c
@@
-25,7
+25,10
@@
# include <time.h>
# endif
#endif
# include <time.h>
# endif
#endif
-#include <wchar.h>
+#ifdef MULTIBYTE_SUPPORT
+# include <wctype.h>
+# include <wchar.h>
+#endif
#define NFMTS MAXARGS
#define NFMTS MAXARGS
@@
-127,8
+130,10
@@
cptrimmed(char **dest, char *str, unsigned int wid, char fill, size_t n) {
int remaining; /* remaining output width available */
int c, ljust, w;
int end; /* number of input bytes remaining in str */
int remaining; /* remaining output width available */
int c, ljust, w;
int end; /* number of input bytes remaining in str */
+#ifdef MULTIBYTE_SUPPORT
int char_len; /* bytes in current character */
wchar_t wide_char;
int char_len; /* bytes in current character */
wchar_t wide_char;
+#endif
char *sp; /* current position in source string */
char *cp = *dest; /* current position in destination string */
char *ep = cp + n; /* end of destination buffer */
char *sp; /* current position in source string */
char *cp = *dest; /* current position in destination string */
char *ep = cp + n; /* end of destination buffer */
@@
-144,6
+149,7
@@
cptrimmed(char **dest, char *str, unsigned int wid, char fill, size_t n) {
mbtowc(NULL, NULL, 0); /* reset shift state */
end = strlen(str);
while (*sp && remaining > 0 && end > 0) {
mbtowc(NULL, NULL, 0); /* reset shift state */
end = strlen(str);
while (*sp && remaining > 0 && end > 0) {
+#ifdef MULTIBYTE_SUPPORT
char_len = mbtowc(&wide_char, sp, end);
if (char_len <= 0 || (cp + char_len > ep))
break;
char_len = mbtowc(&wide_char, sp, end);
if (char_len <= 0 || (cp + char_len > ep))
break;
@@
-152,6
+158,11
@@
cptrimmed(char **dest, char *str, unsigned int wid, char fill, size_t n) {
if (iswcntrl(wide_char) || iswspace(wide_char)) {
sp += char_len;
if (iswcntrl(wide_char) || iswspace(wide_char)) {
sp += char_len;
+#else
+ end--;
+ if (iscntrl(*sp) || isspace(*sp)) {
+ sp++;
+#endif
if (!prevCtrl) {
*cp++ = ' ';
remaining--;
if (!prevCtrl) {
*cp++ = ' ';
remaining--;
@@
-162,6
+173,7
@@
cptrimmed(char **dest, char *str, unsigned int wid, char fill, size_t n) {
}
prevCtrl = 0;
}
prevCtrl = 0;
+#ifdef MULTIBYTE_SUPPORT
w = wcwidth(wide_char);
if (w >= 0 && remaining >= w) {
strncpy(cp, sp, char_len);
w = wcwidth(wide_char);
if (w >= 0 && remaining >= w) {
strncpy(cp, sp, char_len);
@@
-169,6
+181,10
@@
cptrimmed(char **dest, char *str, unsigned int wid, char fill, size_t n) {
remaining -= w;
}
sp += char_len;
remaining -= w;
}
sp += char_len;
+#else
+ *cp++ = *sp++;
+ remaining--;
+#endif
}
}
}
}
@@
-272,15
+288,17
@@
get_x400_comp (char *mbox, char *key, char *buffer, int buffer_len)
|| !(cp = strchr(mbox += idx + strlen (key), '/')))
return 0;
|| !(cp = strchr(mbox += idx + strlen (key), '/')))
return 0;
- snprintf (buffer, buffer_len, "%*.*s", cp - mbox, cp - mbox, mbox);
+ snprintf (buffer, buffer_len, "%*.*s", (int)(cp - mbox), (int)(cp - mbox), mbox);
return 1;
}
struct format *
fmt_scan (struct format *format, char *scanl, int width, int *dat)
{
return 1;
}
struct format *
fmt_scan (struct format *format, char *scanl, int width, int *dat)
{
- char *cp, *ep, *sp;
- char *savestr, *str = NULL;
+ char *cp, *ep;
+ unsigned char *sp;
+ char *savestr = NULL;
+ unsigned char *str = NULL;
char buffer[BUFSIZ], buffer2[BUFSIZ];
int i, c, ljust, n;
int value = 0;
char buffer[BUFSIZ], buffer2[BUFSIZ];
int i, c, ljust, n;
int value = 0;
@@
-343,11
+361,12
@@
fmt_scan (struct format *format, char *scanl, int width, int *dat)
case FT_NUM:
n = snprintf(cp, ep - cp + 1, "%d", value);
case FT_NUM:
n = snprintf(cp, ep - cp + 1, "%d", value);
- if (n >= 0)
+ if (n >= 0) {
if (n >= ep - cp) {
cp = ep;
} else
cp += n;
if (n >= ep - cp) {
cp = ep;
} else
cp += n;
+ }
break;
case FT_NUMF:
cpnumber (&cp, value, fmt->f_width, fmt->f_fill, ep - cp);
break;
case FT_NUMF:
cpnumber (&cp, value, fmt->f_width, fmt->f_fill, ep - cp);
@@
-476,7
+495,7
@@
fmt_scan (struct format *format, char *scanl, int width, int *dat)
case FT_LS_TRIM:
if (str) {
case FT_LS_TRIM:
if (str) {
- char *xp;
+ unsigned char *xp;
strncpy(buffer, str, sizeof(buffer));
buffer[sizeof(buffer)-1] = '\0';
strncpy(buffer, str, sizeof(buffer));
buffer[sizeof(buffer)-1] = '\0';
@@
-784,7
+803,8
@@
fmt_scan (struct format *format, char *scanl, int width, int *dat)
* (e.g., "To: ")
*/
{
* (e.g., "To: ")
*/
{
- char *lp, *lastb;
+ unsigned char *lp;
+ char *lastb;
int indent, wid, len;
lp = str;
int indent, wid, len;
lp = str;