changed not to use the opposite type when outputting the padding character
This commit is contained in:
parent
198bd714b0
commit
1a0dc68fa3
@ -81,17 +81,21 @@ static char_t* sprintn (char_t* nbuf, qse_uintmax_t num, int base, int *lenp, in
|
|||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef PUT_CHAR
|
/* NOTE: data output is aborted if the data limit is reached or
|
||||||
#undef PUT_OCHAR
|
* I/O error occurs */
|
||||||
|
|
||||||
#define PUT_CHAR(c) do { \
|
#define PUT_CHAR(c) do { \
|
||||||
if (data->put_char (c, data->ctx) <= -1) goto oops; \
|
int xx; \
|
||||||
data->count++; \
|
if (data->count >= data->limit) goto done; \
|
||||||
|
if ((xx = data->put_char (c, data->ctx)) <= -1) goto oops; \
|
||||||
|
data->count += xx; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define PUT_OCHAR(c) do { \
|
#define PUT_OCHAR(c) do { \
|
||||||
if (data->put_ochar (c, data->ctx) <= -1) goto oops; \
|
int xx; \
|
||||||
data->count++; \
|
if (data->count >= data->limit) goto done; \
|
||||||
|
if ((xx = data->put_ochar (c, data->ctx)) <= -1) goto oops; \
|
||||||
|
data->count += xx; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
int fmtout (const char_t* fmt, qse_fmtout_t* data, va_list ap)
|
int fmtout (const char_t* fmt, qse_fmtout_t* data, va_list ap)
|
||||||
@ -101,7 +105,7 @@ int fmtout (const char_t* fmt, qse_fmtout_t* data, va_list ap)
|
|||||||
int n, base, tmp, width, neg, sign, precision, upper;
|
int n, base, tmp, width, neg, sign, precision, upper;
|
||||||
uchar_t ch;
|
uchar_t ch;
|
||||||
char_t ach, padc, * sp;
|
char_t ach, padc, * sp;
|
||||||
ochar_t oach, opadc, * osp;
|
ochar_t oach, * osp;
|
||||||
int lm_flag, lm_dflag, flagc, numlen;
|
int lm_flag, lm_dflag, flagc, numlen;
|
||||||
qse_uintmax_t num = 0;
|
qse_uintmax_t num = 0;
|
||||||
int stop = 0;
|
int stop = 0;
|
||||||
@ -137,7 +141,7 @@ int fmtout (const char_t* fmt, qse_fmtout_t* data, va_list ap)
|
|||||||
}
|
}
|
||||||
percent = fmt - 1;
|
percent = fmt - 1;
|
||||||
|
|
||||||
padc = T(' '); opadc = OT(' ');
|
padc = T(' ');
|
||||||
width = 0; precision = 0;
|
width = 0; precision = 0;
|
||||||
neg = 0; sign = 0; upper = 0;
|
neg = 0; sign = 0; upper = 0;
|
||||||
|
|
||||||
@ -184,7 +188,6 @@ reswitch:
|
|||||||
if (flagc & FLAGC_ZEROPAD)
|
if (flagc & FLAGC_ZEROPAD)
|
||||||
{
|
{
|
||||||
padc = T(' ');
|
padc = T(' ');
|
||||||
opadc = OT(' ');
|
|
||||||
flagc &= ~FLAGC_ZEROPAD;
|
flagc &= ~FLAGC_ZEROPAD;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -230,7 +233,6 @@ reswitch:
|
|||||||
if (!(flagc & (FLAGC_DOT | FLAGC_LEFTADJ)))
|
if (!(flagc & (FLAGC_DOT | FLAGC_LEFTADJ)))
|
||||||
{
|
{
|
||||||
padc = T('0');
|
padc = T('0');
|
||||||
opadc = OT('0');
|
|
||||||
flagc |= FLAGC_ZEROPAD;
|
flagc |= FLAGC_ZEROPAD;
|
||||||
goto reswitch;
|
goto reswitch;
|
||||||
}
|
}
|
||||||
@ -358,6 +360,8 @@ reswitch:
|
|||||||
goto number;
|
goto number;
|
||||||
|
|
||||||
case T('c'):
|
case T('c'):
|
||||||
|
/* zerpad must not take effect for 'c' */
|
||||||
|
if (flagc & FLAGC_ZEROPAD) padc = QSE_T(' ');
|
||||||
if (((lm_flag & LF_H) && (QSE_SIZEOF(char_t) > QSE_SIZEOF(ochar_t))) ||
|
if (((lm_flag & LF_H) && (QSE_SIZEOF(char_t) > QSE_SIZEOF(ochar_t))) ||
|
||||||
((lm_flag & LF_L) && (QSE_SIZEOF(char_t) < QSE_SIZEOF(ochar_t)))) goto uppercase_c;
|
((lm_flag & LF_L) && (QSE_SIZEOF(char_t) < QSE_SIZEOF(ochar_t)))) goto uppercase_c;
|
||||||
lowercase_c:
|
lowercase_c:
|
||||||
@ -378,6 +382,8 @@ reswitch:
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case T('C'):
|
case T('C'):
|
||||||
|
/* zerpad must not take effect for 'C' */
|
||||||
|
if (flagc & FLAGC_ZEROPAD) padc = QSE_T(' ');
|
||||||
if (((lm_flag & LF_H) && (QSE_SIZEOF(char_t) < QSE_SIZEOF(ochar_t))) ||
|
if (((lm_flag & LF_H) && (QSE_SIZEOF(char_t) < QSE_SIZEOF(ochar_t))) ||
|
||||||
((lm_flag & LF_L) && (QSE_SIZEOF(char_t) > QSE_SIZEOF(ochar_t)))) goto lowercase_c;
|
((lm_flag & LF_L) && (QSE_SIZEOF(char_t) > QSE_SIZEOF(ochar_t)))) goto lowercase_c;
|
||||||
uppercase_c:
|
uppercase_c:
|
||||||
@ -387,22 +393,24 @@ reswitch:
|
|||||||
width--;
|
width--;
|
||||||
if (!(flagc & FLAGC_LEFTADJ) && width > 0)
|
if (!(flagc & FLAGC_LEFTADJ) && width > 0)
|
||||||
{
|
{
|
||||||
while (width--) PUT_OCHAR (opadc);
|
while (width--) PUT_CHAR (padc);
|
||||||
}
|
}
|
||||||
PUT_OCHAR (oach);
|
PUT_OCHAR (oach);
|
||||||
if ((flagc & FLAGC_LEFTADJ) && width > 0)
|
if ((flagc & FLAGC_LEFTADJ) && width > 0)
|
||||||
{
|
{
|
||||||
while (width--) PUT_OCHAR (opadc);
|
while (width--) PUT_CHAR (padc);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T('s'):
|
case T('s'):
|
||||||
|
/* zerpad must not take effect for 's' */
|
||||||
|
if (flagc & FLAGC_ZEROPAD) padc = QSE_T(' ');
|
||||||
if (((lm_flag & LF_H) && (QSE_SIZEOF(char_t) > QSE_SIZEOF(ochar_t))) ||
|
if (((lm_flag & LF_H) && (QSE_SIZEOF(char_t) > QSE_SIZEOF(ochar_t))) ||
|
||||||
((lm_flag & LF_L) && (QSE_SIZEOF(char_t) < QSE_SIZEOF(ochar_t)))) goto uppercase_s;
|
((lm_flag & LF_L) && (QSE_SIZEOF(char_t) < QSE_SIZEOF(ochar_t)))) goto uppercase_s;
|
||||||
lowercase_s:
|
lowercase_s:
|
||||||
sp = va_arg (ap, char_t*);
|
sp = va_arg (ap, char_t*);
|
||||||
if (sp == QSE_NULL) p = T("(null)");
|
if (sp == QSE_NULL) p = T("(null)");
|
||||||
|
|
||||||
print_lowercase_s:
|
print_lowercase_s:
|
||||||
if (flagc & FLAGC_DOT)
|
if (flagc & FLAGC_DOT)
|
||||||
{
|
{
|
||||||
@ -416,7 +424,7 @@ reswitch:
|
|||||||
}
|
}
|
||||||
|
|
||||||
width -= n;
|
width -= n;
|
||||||
|
|
||||||
if (!(flagc & FLAGC_LEFTADJ) && width > 0)
|
if (!(flagc & FLAGC_LEFTADJ) && width > 0)
|
||||||
{
|
{
|
||||||
while (width--) PUT_CHAR(padc);
|
while (width--) PUT_CHAR(padc);
|
||||||
@ -429,9 +437,12 @@ reswitch:
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case T('S'):
|
case T('S'):
|
||||||
|
/* zerpad must not take effect for 'S' */
|
||||||
|
if (flagc & FLAGC_ZEROPAD) padc = QSE_T(' ');
|
||||||
if (((lm_flag & LF_H) && (QSE_SIZEOF(char_t) < QSE_SIZEOF(ochar_t))) ||
|
if (((lm_flag & LF_H) && (QSE_SIZEOF(char_t) < QSE_SIZEOF(ochar_t))) ||
|
||||||
((lm_flag & LF_L) && (QSE_SIZEOF(char_t) > QSE_SIZEOF(ochar_t)))) goto lowercase_s;
|
((lm_flag & LF_L) && (QSE_SIZEOF(char_t) > QSE_SIZEOF(ochar_t)))) goto lowercase_s;
|
||||||
uppercase_s:
|
uppercase_s:
|
||||||
|
|
||||||
osp = va_arg (ap, ochar_t*);
|
osp = va_arg (ap, ochar_t*);
|
||||||
if (osp == QSE_NULL) osp = OT("(null)");
|
if (osp == QSE_NULL) osp = OT("(null)");
|
||||||
if (flagc & FLAGC_DOT)
|
if (flagc & FLAGC_DOT)
|
||||||
@ -449,12 +460,12 @@ reswitch:
|
|||||||
|
|
||||||
if (!(flagc & FLAGC_LEFTADJ) && width > 0)
|
if (!(flagc & FLAGC_LEFTADJ) && width > 0)
|
||||||
{
|
{
|
||||||
while (width--) PUT_OCHAR (opadc);
|
while (width--) PUT_CHAR (padc);
|
||||||
}
|
}
|
||||||
while (n--) PUT_OCHAR(*osp++);
|
while (n--) PUT_OCHAR(*osp++);
|
||||||
if ((flagc & FLAGC_LEFTADJ) && width > 0)
|
if ((flagc & FLAGC_LEFTADJ) && width > 0)
|
||||||
{
|
{
|
||||||
while (width--) PUT_OCHAR (opadc);
|
while (width--) PUT_CHAR (padc);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -653,7 +653,7 @@ qse_ssize_t qse_tio_writembs (
|
|||||||
* buffer. note that this flushes characters after nl also.*/
|
* buffer. note that this flushes characters after nl also.*/
|
||||||
if (nl && qse_tio_flush (tio) <= -1) return -1;
|
if (nl && qse_tio_flush (tio) <= -1) return -1;
|
||||||
|
|
||||||
/* returns the number multi-bytes characters handled */
|
/* returns the number multi-byte characters handled */
|
||||||
return xptr - mptr;
|
return xptr - mptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user