upx-clang-format -i snprintf.cpp
This commit is contained in:
+138
-163
@@ -58,7 +58,6 @@
|
|||||||
*
|
*
|
||||||
**************************************************************/
|
**************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
#include "conf.h"
|
#include "conf.h"
|
||||||
#else
|
#else
|
||||||
@@ -73,26 +72,26 @@
|
|||||||
#undef LLONG
|
#undef LLONG
|
||||||
#undef ULLONG
|
#undef ULLONG
|
||||||
#if 1
|
#if 1
|
||||||
# define LLONG upx_int64_t
|
#define LLONG upx_int64_t
|
||||||
# define ULLONG upx_uint64_t
|
#define ULLONG upx_uint64_t
|
||||||
#else
|
#else
|
||||||
# define LLONG long int
|
#define LLONG long int
|
||||||
# define ULLONG unsigned long int
|
#define ULLONG unsigned long int
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#undef NO_FLOAT
|
#undef NO_FLOAT
|
||||||
#undef LDOUBLE
|
#undef LDOUBLE
|
||||||
#if 1
|
#if 1
|
||||||
# define NO_FLOAT 1
|
#define NO_FLOAT 1
|
||||||
# if (ACC_CC_SUNPROC)
|
#if (ACC_CC_SUNPROC)
|
||||||
# else
|
|
||||||
# define float error no_float
|
|
||||||
# define double error no_float
|
|
||||||
# endif
|
|
||||||
#elif 0 || (HAVE_LONG_DOUBLE)
|
|
||||||
# define LDOUBLE long double
|
|
||||||
#else
|
#else
|
||||||
# define LDOUBLE double
|
#define float error no_float
|
||||||
|
#define double error no_float
|
||||||
|
#endif
|
||||||
|
#elif 0 || (HAVE_LONG_DOUBLE)
|
||||||
|
#define LDOUBLE long double
|
||||||
|
#else
|
||||||
|
#define LDOUBLE double
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -124,26 +123,22 @@
|
|||||||
#define DP_C_LDOUBLE 3
|
#define DP_C_LDOUBLE 3
|
||||||
#define DP_C_LLONG 4
|
#define DP_C_LLONG 4
|
||||||
|
|
||||||
#define char_to_int(p) ((p)- '0')
|
#define char_to_int(p) ((p) - '0')
|
||||||
#undef MAX
|
#undef MAX
|
||||||
#define MAX(p,q) (((p) >= (q)) ? (p) : (q))
|
#define MAX(p, q) (((p) >= (q)) ? (p) : (q))
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
//
|
//
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
static void dopr_outch(char *buffer, size_t *currlen, size_t maxlen, int c)
|
static void dopr_outch(char *buffer, size_t *currlen, size_t maxlen, int c) {
|
||||||
{
|
|
||||||
if (*currlen < maxlen)
|
if (*currlen < maxlen)
|
||||||
buffer[*currlen] = (char) c;
|
buffer[*currlen] = (char) c;
|
||||||
*currlen += 1;
|
*currlen += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void fmtstr(char *buffer, size_t *currlen, size_t maxlen, const char *value, int flags,
|
||||||
static void fmtstr(char *buffer, size_t *currlen, size_t maxlen,
|
int min, int max) {
|
||||||
const char *value, int flags, int min, int max)
|
|
||||||
{
|
|
||||||
int padlen, strln; /* amount to pad */
|
int padlen, strln; /* amount to pad */
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
|
|
||||||
@@ -153,7 +148,7 @@ static void fmtstr(char *buffer, size_t *currlen, size_t maxlen,
|
|||||||
if (value == NULL)
|
if (value == NULL)
|
||||||
value = "<NULL>";
|
value = "<NULL>";
|
||||||
|
|
||||||
for (strln = 0; value[strln]; ) /* strlen */
|
for (strln = 0; value[strln];) /* strlen */
|
||||||
++strln;
|
++strln;
|
||||||
padlen = min - strln;
|
padlen = min - strln;
|
||||||
if (padlen < 0)
|
if (padlen < 0)
|
||||||
@@ -162,29 +157,27 @@ static void fmtstr(char *buffer, size_t *currlen, size_t maxlen,
|
|||||||
padlen = -padlen; /* Left Justify */
|
padlen = -padlen; /* Left Justify */
|
||||||
|
|
||||||
while ((padlen > 0) && (cnt < max)) {
|
while ((padlen > 0) && (cnt < max)) {
|
||||||
dopr_outch (buffer, currlen, maxlen, ' ');
|
dopr_outch(buffer, currlen, maxlen, ' ');
|
||||||
--padlen;
|
--padlen;
|
||||||
++cnt;
|
++cnt;
|
||||||
}
|
}
|
||||||
while (*value && (cnt < max)) {
|
while (*value && (cnt < max)) {
|
||||||
dopr_outch (buffer, currlen, maxlen, *value++);
|
dopr_outch(buffer, currlen, maxlen, *value++);
|
||||||
++cnt;
|
++cnt;
|
||||||
}
|
}
|
||||||
while ((padlen < 0) && (cnt < max)) {
|
while ((padlen < 0) && (cnt < max)) {
|
||||||
dopr_outch (buffer, currlen, maxlen, ' ');
|
dopr_outch(buffer, currlen, maxlen, ' ');
|
||||||
++padlen;
|
++padlen;
|
||||||
++cnt;
|
++cnt;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Have to handle DP_F_NUM (ie 0x and 0 alternates) */
|
/* Have to handle DP_F_NUM (ie 0x and 0 alternates) */
|
||||||
static void fmtint(char *buffer, size_t *currlen, size_t maxlen,
|
static void fmtint(char *buffer, size_t *currlen, size_t maxlen, LLONG value, unsigned base,
|
||||||
LLONG value, unsigned base, int min, int max, int flags)
|
int min, int max, int flags) {
|
||||||
{
|
|
||||||
int signvalue = 0;
|
int signvalue = 0;
|
||||||
ULLONG uvalue;
|
ULLONG uvalue;
|
||||||
char convert[64+1];
|
char convert[64 + 1];
|
||||||
int place = 0;
|
int place = 0;
|
||||||
int spadlen = 0; /* amount to space pad */
|
int spadlen = 0; /* amount to space pad */
|
||||||
int zpadlen = 0; /* amount to zero pad */
|
int zpadlen = 0; /* amount to zero pad */
|
||||||
@@ -197,7 +190,7 @@ static void fmtint(char *buffer, size_t *currlen, size_t maxlen,
|
|||||||
|
|
||||||
uvalue = value;
|
uvalue = value;
|
||||||
if (!(flags & DP_F_UNSIGNED)) {
|
if (!(flags & DP_F_UNSIGNED)) {
|
||||||
if( value < 0 ) {
|
if (value < 0) {
|
||||||
signvalue = '-';
|
signvalue = '-';
|
||||||
uvalue = -value;
|
uvalue = -value;
|
||||||
} else {
|
} else {
|
||||||
@@ -212,13 +205,15 @@ static void fmtint(char *buffer, size_t *currlen, size_t maxlen,
|
|||||||
do {
|
do {
|
||||||
convert[place] = digits[(unsigned) (uvalue % base)];
|
convert[place] = digits[(unsigned) (uvalue % base)];
|
||||||
uvalue /= base;
|
uvalue /= base;
|
||||||
} while (++place < (int)sizeof(convert) - 1 && uvalue);
|
} while (++place < (int) sizeof(convert) - 1 && uvalue);
|
||||||
convert[place] = 0;
|
convert[place] = 0;
|
||||||
|
|
||||||
zpadlen = max - place;
|
zpadlen = max - place;
|
||||||
spadlen = min - MAX (max, place) - (signvalue ? 1 : 0);
|
spadlen = min - MAX(max, place) - (signvalue ? 1 : 0);
|
||||||
if (zpadlen < 0) zpadlen = 0;
|
if (zpadlen < 0)
|
||||||
if (spadlen < 0) spadlen = 0;
|
zpadlen = 0;
|
||||||
|
if (spadlen < 0)
|
||||||
|
spadlen = 0;
|
||||||
if (flags & DP_F_ZERO) {
|
if (flags & DP_F_ZERO) {
|
||||||
zpadlen = MAX(zpadlen, spadlen);
|
zpadlen = MAX(zpadlen, spadlen);
|
||||||
spadlen = 0;
|
spadlen = 0;
|
||||||
@@ -227,46 +222,43 @@ static void fmtint(char *buffer, size_t *currlen, size_t maxlen,
|
|||||||
spadlen = -spadlen; /* Left Justifty */
|
spadlen = -spadlen; /* Left Justifty */
|
||||||
|
|
||||||
#ifdef DEBUG_SNPRINTF
|
#ifdef DEBUG_SNPRINTF
|
||||||
printf("zpad: %d, spad: %d, min: %d, max: %d, place: %d\n",
|
printf("zpad: %d, spad: %d, min: %d, max: %d, place: %d\n", zpadlen, spadlen, min, max, place);
|
||||||
zpadlen, spadlen, min, max, place);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Spaces */
|
/* Spaces */
|
||||||
while (spadlen > 0) {
|
while (spadlen > 0) {
|
||||||
dopr_outch (buffer, currlen, maxlen, ' ');
|
dopr_outch(buffer, currlen, maxlen, ' ');
|
||||||
--spadlen;
|
--spadlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Sign */
|
/* Sign */
|
||||||
if (signvalue)
|
if (signvalue)
|
||||||
dopr_outch (buffer, currlen, maxlen, signvalue);
|
dopr_outch(buffer, currlen, maxlen, signvalue);
|
||||||
|
|
||||||
/* Zeros */
|
/* Zeros */
|
||||||
while (zpadlen > 0) {
|
while (zpadlen > 0) {
|
||||||
dopr_outch (buffer, currlen, maxlen, '0');
|
dopr_outch(buffer, currlen, maxlen, '0');
|
||||||
--zpadlen;
|
--zpadlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Digits */
|
/* Digits */
|
||||||
while (place > 0)
|
while (place > 0)
|
||||||
dopr_outch (buffer, currlen, maxlen, convert[--place]);
|
dopr_outch(buffer, currlen, maxlen, convert[--place]);
|
||||||
|
|
||||||
/* Left Justified spaces */
|
/* Left Justified spaces */
|
||||||
while (spadlen < 0) {
|
while (spadlen < 0) {
|
||||||
dopr_outch (buffer, currlen, maxlen, ' ');
|
dopr_outch(buffer, currlen, maxlen, ' ');
|
||||||
++spadlen;
|
++spadlen;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
// floating format support
|
// floating format support
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
#if !(NO_FLOAT)
|
#if !(NO_FLOAT)
|
||||||
|
|
||||||
static LDOUBLE abs_val(LDOUBLE value)
|
static LDOUBLE abs_val(LDOUBLE value) {
|
||||||
{
|
|
||||||
LDOUBLE result = value;
|
LDOUBLE result = value;
|
||||||
|
|
||||||
if (value < 0)
|
if (value < 0)
|
||||||
@@ -275,8 +267,7 @@ static LDOUBLE abs_val(LDOUBLE value)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static LDOUBLE POW10(int exp)
|
static LDOUBLE POW10(int exp) {
|
||||||
{
|
|
||||||
LDOUBLE result = 1;
|
LDOUBLE result = 1;
|
||||||
|
|
||||||
while (exp) {
|
while (exp) {
|
||||||
@@ -287,29 +278,29 @@ static LDOUBLE POW10(int exp)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static LLONG ROUND(LDOUBLE value)
|
static LLONG ROUND(LDOUBLE value) {
|
||||||
{
|
|
||||||
LLONG intpart;
|
LLONG intpart;
|
||||||
|
|
||||||
intpart = (LLONG)value;
|
intpart = (LLONG) value;
|
||||||
value = value - intpart;
|
value = value - intpart;
|
||||||
if (value >= 0.5) intpart++;
|
if (value >= 0.5)
|
||||||
|
intpart++;
|
||||||
|
|
||||||
return intpart;
|
return intpart;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* a replacement for modf that doesn't need the math library. Should
|
/* a replacement for modf that doesn't need the math library. Should
|
||||||
be portable, but slow */
|
be portable, but slow */
|
||||||
static double my_modf(double x0, double *iptr)
|
static double my_modf(double x0, double *iptr) {
|
||||||
{
|
|
||||||
int i;
|
int i;
|
||||||
long l;
|
long l;
|
||||||
double x = x0;
|
double x = x0;
|
||||||
double f = 1.0;
|
double f = 1.0;
|
||||||
|
|
||||||
for (i = 0; i < 100; i++) {
|
for (i = 0; i < 100; i++) {
|
||||||
l = (long)x;
|
l = (long) x;
|
||||||
if (l <= (x+1) && l >= (x-1)) break;
|
if (l <= (x + 1) && l >= (x - 1))
|
||||||
|
break;
|
||||||
x *= 0.1;
|
x *= 0.1;
|
||||||
f *= 10.0;
|
f *= 10.0;
|
||||||
}
|
}
|
||||||
@@ -323,8 +314,8 @@ static double my_modf(double x0, double *iptr)
|
|||||||
if (i != 0) {
|
if (i != 0) {
|
||||||
double i2, ret;
|
double i2, ret;
|
||||||
|
|
||||||
ret = my_modf(x0-l*f, &i2);
|
ret = my_modf(x0 - l * f, &i2);
|
||||||
*iptr = l*f + i2;
|
*iptr = l * f + i2;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -332,17 +323,15 @@ static double my_modf(double x0, double *iptr)
|
|||||||
return x - *iptr;
|
return x - *iptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void fmtfp(char *buffer, size_t *currlen, size_t maxlen, LDOUBLE fvalue, int min, int max,
|
||||||
static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
|
int flags) {
|
||||||
LDOUBLE fvalue, int min, int max, int flags)
|
/* avoid warnings with 'gcc -Wshadow' */
|
||||||
{
|
|
||||||
/* avoid warnings with 'gcc -Wshadow' */
|
|
||||||
#undef index
|
#undef index
|
||||||
#define index iindex
|
#define index iindex
|
||||||
int signvalue = 0;
|
int signvalue = 0;
|
||||||
double ufvalue;
|
double ufvalue;
|
||||||
char iconvert[311+1];
|
char iconvert[311 + 1];
|
||||||
char fconvert[311+1];
|
char fconvert[311 + 1];
|
||||||
int iplace = 0;
|
int iplace = 0;
|
||||||
int fplace = 0;
|
int fplace = 0;
|
||||||
int padlen = 0; /* amount to pad */
|
int padlen = 0; /* amount to pad */
|
||||||
@@ -362,7 +351,7 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
|
|||||||
if (max < 0)
|
if (max < 0)
|
||||||
max = 6;
|
max = 6;
|
||||||
|
|
||||||
ufvalue = abs_val (fvalue);
|
ufvalue = abs_val(fvalue);
|
||||||
|
|
||||||
if (fvalue < 0) {
|
if (fvalue < 0) {
|
||||||
signvalue = '-';
|
signvalue = '-';
|
||||||
@@ -408,34 +397,34 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
|
|||||||
/* Convert integer part */
|
/* Convert integer part */
|
||||||
do {
|
do {
|
||||||
temp = intpart;
|
temp = intpart;
|
||||||
my_modf(intpart*0.1, &intpart);
|
my_modf(intpart * 0.1, &intpart);
|
||||||
temp = temp*0.1;
|
temp = temp * 0.1;
|
||||||
index = (int) ((temp - intpart + 0.05) * 10.0);
|
index = (int) ((temp - intpart + 0.05) * 10.0);
|
||||||
/* index = (int) (((double)(temp*0.1) -intpart +0.05) *10.0); */
|
/* index = (int) (((double)(temp*0.1) -intpart +0.05) *10.0); */
|
||||||
/* printf ("%llf, %f, %x\n", temp, intpart, index); */
|
/* printf ("%llf, %f, %x\n", temp, intpart, index); */
|
||||||
iconvert[iplace] = digits[index];
|
iconvert[iplace] = digits[index];
|
||||||
} while (++iplace < (int)sizeof(iconvert) - 1 && intpart);
|
} while (++iplace < (int) sizeof(iconvert) - 1 && intpart);
|
||||||
iconvert[iplace] = 0;
|
iconvert[iplace] = 0;
|
||||||
|
|
||||||
/* Convert fractional part */
|
/* Convert fractional part */
|
||||||
if (fracpart)
|
if (fracpart) {
|
||||||
{
|
|
||||||
do {
|
do {
|
||||||
temp = fracpart;
|
temp = fracpart;
|
||||||
my_modf(fracpart*0.1, &fracpart);
|
my_modf(fracpart * 0.1, &fracpart);
|
||||||
temp = temp*0.1;
|
temp = temp * 0.1;
|
||||||
index = (int) ((temp - fracpart + 0.05) * 10.0);
|
index = (int) ((temp - fracpart + 0.05) * 10.0);
|
||||||
/* index = (int) ((((temp/10) -fracpart) +0.05) *10); */
|
/* index = (int) ((((temp/10) -fracpart) +0.05) *10); */
|
||||||
/* printf ("%lf, %lf, %ld\n", temp, fracpart, index); */
|
/* printf ("%lf, %lf, %ld\n", temp, fracpart, index); */
|
||||||
fconvert[fplace] = digits[index];
|
fconvert[fplace] = digits[index];
|
||||||
} while (++fplace < (int)sizeof(fconvert) - 1 && fracpart);
|
} while (++fplace < (int) sizeof(fconvert) - 1 && fracpart);
|
||||||
}
|
}
|
||||||
fconvert[fplace] = 0;
|
fconvert[fplace] = 0;
|
||||||
|
|
||||||
/* -1 for decimal point, another -1 if we are printing a sign */
|
/* -1 for decimal point, another -1 if we are printing a sign */
|
||||||
padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0);
|
padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0);
|
||||||
zpadlen = max - fplace;
|
zpadlen = max - fplace;
|
||||||
if (zpadlen < 0) zpadlen = 0;
|
if (zpadlen < 0)
|
||||||
|
zpadlen = 0;
|
||||||
if (padlen < 0)
|
if (padlen < 0)
|
||||||
padlen = 0;
|
padlen = 0;
|
||||||
if (flags & DP_F_MINUS)
|
if (flags & DP_F_MINUS)
|
||||||
@@ -443,24 +432,24 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
|
|||||||
|
|
||||||
if ((flags & DP_F_ZERO) && (padlen > 0)) {
|
if ((flags & DP_F_ZERO) && (padlen > 0)) {
|
||||||
if (signvalue) {
|
if (signvalue) {
|
||||||
dopr_outch (buffer, currlen, maxlen, signvalue);
|
dopr_outch(buffer, currlen, maxlen, signvalue);
|
||||||
--padlen;
|
--padlen;
|
||||||
signvalue = 0;
|
signvalue = 0;
|
||||||
}
|
}
|
||||||
while (padlen > 0) {
|
while (padlen > 0) {
|
||||||
dopr_outch (buffer, currlen, maxlen, '0');
|
dopr_outch(buffer, currlen, maxlen, '0');
|
||||||
--padlen;
|
--padlen;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (padlen > 0) {
|
while (padlen > 0) {
|
||||||
dopr_outch (buffer, currlen, maxlen, ' ');
|
dopr_outch(buffer, currlen, maxlen, ' ');
|
||||||
--padlen;
|
--padlen;
|
||||||
}
|
}
|
||||||
if (signvalue)
|
if (signvalue)
|
||||||
dopr_outch (buffer, currlen, maxlen, signvalue);
|
dopr_outch(buffer, currlen, maxlen, signvalue);
|
||||||
|
|
||||||
while (iplace > 0)
|
while (iplace > 0)
|
||||||
dopr_outch (buffer, currlen, maxlen, iconvert[--iplace]);
|
dopr_outch(buffer, currlen, maxlen, iconvert[--iplace]);
|
||||||
|
|
||||||
#ifdef DEBUG_SNPRINTF
|
#ifdef DEBUG_SNPRINTF
|
||||||
printf("fmtfp: fplace=%d zpadlen=%d\n", fplace, zpadlen);
|
printf("fmtfp: fplace=%d zpadlen=%d\n", fplace, zpadlen);
|
||||||
@@ -471,34 +460,31 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
|
|||||||
* char to print out.
|
* char to print out.
|
||||||
*/
|
*/
|
||||||
if (max > 0) {
|
if (max > 0) {
|
||||||
dopr_outch (buffer, currlen, maxlen, '.');
|
dopr_outch(buffer, currlen, maxlen, '.');
|
||||||
|
|
||||||
while (fplace > 0)
|
while (fplace > 0)
|
||||||
dopr_outch (buffer, currlen, maxlen, fconvert[--fplace]);
|
dopr_outch(buffer, currlen, maxlen, fconvert[--fplace]);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (zpadlen > 0) {
|
while (zpadlen > 0) {
|
||||||
dopr_outch (buffer, currlen, maxlen, '0');
|
dopr_outch(buffer, currlen, maxlen, '0');
|
||||||
--zpadlen;
|
--zpadlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (padlen < 0) {
|
while (padlen < 0) {
|
||||||
dopr_outch (buffer, currlen, maxlen, ' ');
|
dopr_outch(buffer, currlen, maxlen, ' ');
|
||||||
++padlen;
|
++padlen;
|
||||||
}
|
}
|
||||||
#undef index
|
#undef index
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif /* !(NO_FLOAT) */
|
#endif /* !(NO_FLOAT) */
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
// dopr()
|
// dopr()
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args)
|
static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args) {
|
||||||
{
|
|
||||||
char ch;
|
char ch;
|
||||||
LLONG value;
|
LLONG value;
|
||||||
#if !(NO_FLOAT)
|
#if !(NO_FLOAT)
|
||||||
@@ -521,12 +507,12 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args
|
|||||||
if (ch == '\0')
|
if (ch == '\0')
|
||||||
state = DP_S_DONE;
|
state = DP_S_DONE;
|
||||||
|
|
||||||
switch(state) {
|
switch (state) {
|
||||||
case DP_S_DEFAULT:
|
case DP_S_DEFAULT:
|
||||||
if (ch == '%')
|
if (ch == '%')
|
||||||
state = DP_S_FLAGS;
|
state = DP_S_FLAGS;
|
||||||
else
|
else
|
||||||
dopr_outch (buffer, &currlen, maxlen, ch);
|
dopr_outch(buffer, &currlen, maxlen, ch);
|
||||||
ch = *format++;
|
ch = *format++;
|
||||||
break;
|
break;
|
||||||
case DP_S_FLAGS:
|
case DP_S_FLAGS:
|
||||||
@@ -557,11 +543,11 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DP_S_MIN:
|
case DP_S_MIN:
|
||||||
if (isdigit((unsigned char)ch)) {
|
if (isdigit((unsigned char) ch)) {
|
||||||
min = 10*min + char_to_int(ch);
|
min = 10 * min + char_to_int(ch);
|
||||||
ch = *format++;
|
ch = *format++;
|
||||||
} else if (ch == '*') {
|
} else if (ch == '*') {
|
||||||
min = va_arg (args, int);
|
min = va_arg(args, int);
|
||||||
ch = *format++;
|
ch = *format++;
|
||||||
state = DP_S_DOT;
|
state = DP_S_DOT;
|
||||||
} else {
|
} else {
|
||||||
@@ -577,13 +563,13 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DP_S_MAX:
|
case DP_S_MAX:
|
||||||
if (isdigit((unsigned char)ch)) {
|
if (isdigit((unsigned char) ch)) {
|
||||||
if (max < 0)
|
if (max < 0)
|
||||||
max = 0;
|
max = 0;
|
||||||
max = 10*max + char_to_int(ch);
|
max = 10 * max + char_to_int(ch);
|
||||||
ch = *format++;
|
ch = *format++;
|
||||||
} else if (ch == '*') {
|
} else if (ch == '*') {
|
||||||
max = va_arg (args, int);
|
max = va_arg(args, int);
|
||||||
ch = *format++;
|
ch = *format++;
|
||||||
state = DP_S_MOD;
|
state = DP_S_MOD;
|
||||||
} else {
|
} else {
|
||||||
@@ -618,77 +604,77 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args
|
|||||||
case 'd':
|
case 'd':
|
||||||
case 'i':
|
case 'i':
|
||||||
if (cflags == DP_C_SHORT)
|
if (cflags == DP_C_SHORT)
|
||||||
value = va_arg (args, int);
|
value = va_arg(args, int);
|
||||||
else if (cflags == DP_C_LONG)
|
else if (cflags == DP_C_LONG)
|
||||||
value = va_arg (args, long int);
|
value = va_arg(args, long int);
|
||||||
else if (cflags == DP_C_LLONG)
|
else if (cflags == DP_C_LLONG)
|
||||||
value = va_arg (args, LLONG);
|
value = va_arg(args, LLONG);
|
||||||
else
|
else
|
||||||
value = va_arg (args, int);
|
value = va_arg(args, int);
|
||||||
fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);
|
fmtint(buffer, &currlen, maxlen, value, 10, min, max, flags);
|
||||||
break;
|
break;
|
||||||
case 'o':
|
case 'o':
|
||||||
flags |= DP_F_UNSIGNED;
|
flags |= DP_F_UNSIGNED;
|
||||||
if (cflags == DP_C_SHORT)
|
if (cflags == DP_C_SHORT)
|
||||||
value = va_arg (args, unsigned int);
|
value = va_arg(args, unsigned int);
|
||||||
else if (cflags == DP_C_LONG)
|
else if (cflags == DP_C_LONG)
|
||||||
value = (long)va_arg (args, unsigned long int);
|
value = (long) va_arg(args, unsigned long int);
|
||||||
else if (cflags == DP_C_LLONG)
|
else if (cflags == DP_C_LLONG)
|
||||||
value = (long)va_arg (args, ULLONG);
|
value = (long) va_arg(args, ULLONG);
|
||||||
else
|
else
|
||||||
value = (long)va_arg (args, unsigned int);
|
value = (long) va_arg(args, unsigned int);
|
||||||
fmtint (buffer, &currlen, maxlen, value, 8, min, max, flags);
|
fmtint(buffer, &currlen, maxlen, value, 8, min, max, flags);
|
||||||
break;
|
break;
|
||||||
case 'u':
|
case 'u':
|
||||||
flags |= DP_F_UNSIGNED;
|
flags |= DP_F_UNSIGNED;
|
||||||
if (cflags == DP_C_SHORT)
|
if (cflags == DP_C_SHORT)
|
||||||
value = va_arg (args, unsigned int);
|
value = va_arg(args, unsigned int);
|
||||||
else if (cflags == DP_C_LONG)
|
else if (cflags == DP_C_LONG)
|
||||||
value = (long)va_arg (args, unsigned long int);
|
value = (long) va_arg(args, unsigned long int);
|
||||||
else if (cflags == DP_C_LLONG)
|
else if (cflags == DP_C_LLONG)
|
||||||
value = (LLONG)va_arg (args, ULLONG);
|
value = (LLONG) va_arg(args, ULLONG);
|
||||||
else
|
else
|
||||||
value = (long)va_arg (args, unsigned int);
|
value = (long) va_arg(args, unsigned int);
|
||||||
fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);
|
fmtint(buffer, &currlen, maxlen, value, 10, min, max, flags);
|
||||||
break;
|
break;
|
||||||
case 'X':
|
case 'X':
|
||||||
flags |= DP_F_UP;
|
flags |= DP_F_UP;
|
||||||
case 'x':
|
case 'x':
|
||||||
flags |= DP_F_UNSIGNED;
|
flags |= DP_F_UNSIGNED;
|
||||||
if (cflags == DP_C_SHORT)
|
if (cflags == DP_C_SHORT)
|
||||||
value = va_arg (args, unsigned int);
|
value = va_arg(args, unsigned int);
|
||||||
else if (cflags == DP_C_LONG)
|
else if (cflags == DP_C_LONG)
|
||||||
value = (long)va_arg (args, unsigned long int);
|
value = (long) va_arg(args, unsigned long int);
|
||||||
else if (cflags == DP_C_LLONG)
|
else if (cflags == DP_C_LLONG)
|
||||||
value = (LLONG)va_arg (args, ULLONG);
|
value = (LLONG) va_arg(args, ULLONG);
|
||||||
else
|
else
|
||||||
value = (long)va_arg (args, unsigned int);
|
value = (long) va_arg(args, unsigned int);
|
||||||
fmtint (buffer, &currlen, maxlen, value, 16, min, max, flags);
|
fmtint(buffer, &currlen, maxlen, value, 16, min, max, flags);
|
||||||
break;
|
break;
|
||||||
#if !(NO_FLOAT)
|
#if !(NO_FLOAT)
|
||||||
case 'f':
|
case 'f':
|
||||||
if (cflags == DP_C_LDOUBLE)
|
if (cflags == DP_C_LDOUBLE)
|
||||||
fvalue = va_arg (args, LDOUBLE);
|
fvalue = va_arg(args, LDOUBLE);
|
||||||
else
|
else
|
||||||
fvalue = va_arg (args, double);
|
fvalue = va_arg(args, double);
|
||||||
/* um, floating point? */
|
/* um, floating point? */
|
||||||
fmtfp (buffer, &currlen, maxlen, fvalue, min, max, flags);
|
fmtfp(buffer, &currlen, maxlen, fvalue, min, max, flags);
|
||||||
break;
|
break;
|
||||||
case 'E':
|
case 'E':
|
||||||
flags |= DP_F_UP;
|
flags |= DP_F_UP;
|
||||||
case 'e':
|
case 'e':
|
||||||
if (cflags == DP_C_LDOUBLE)
|
if (cflags == DP_C_LDOUBLE)
|
||||||
fvalue = va_arg (args, LDOUBLE);
|
fvalue = va_arg(args, LDOUBLE);
|
||||||
else
|
else
|
||||||
fvalue = va_arg (args, double);
|
fvalue = va_arg(args, double);
|
||||||
break;
|
break;
|
||||||
case 'G':
|
case 'G':
|
||||||
flags |= DP_F_UP;
|
flags |= DP_F_UP;
|
||||||
case 'g':
|
case 'g':
|
||||||
if (cflags == DP_C_LDOUBLE)
|
if (cflags == DP_C_LDOUBLE)
|
||||||
fvalue = va_arg (args, LDOUBLE);
|
fvalue = va_arg(args, LDOUBLE);
|
||||||
else
|
else
|
||||||
fvalue = va_arg (args, double);
|
fvalue = va_arg(args, double);
|
||||||
break;
|
break;
|
||||||
#else
|
#else
|
||||||
case 'f':
|
case 'f':
|
||||||
@@ -700,42 +686,45 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args
|
|||||||
exit(255);
|
exit(255);
|
||||||
#endif /* !(NO_FLOAT) */
|
#endif /* !(NO_FLOAT) */
|
||||||
case 'c':
|
case 'c':
|
||||||
dopr_outch (buffer, &currlen, maxlen, va_arg (args, int));
|
dopr_outch(buffer, &currlen, maxlen, va_arg(args, int));
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
strvalue = va_arg (args, const char *);
|
strvalue = va_arg(args, const char *);
|
||||||
if (!strvalue) strvalue = "(NULL)";
|
if (!strvalue)
|
||||||
|
strvalue = "(NULL)";
|
||||||
if (max == -1) {
|
if (max == -1) {
|
||||||
max = (int) strlen(strvalue);
|
max = (int) strlen(strvalue);
|
||||||
}
|
}
|
||||||
if (min > 0 && max >= 0 && min > max) max = min;
|
if (min > 0 && max >= 0 && min > max)
|
||||||
fmtstr (buffer, &currlen, maxlen, strvalue, flags, min, max);
|
max = min;
|
||||||
|
fmtstr(buffer, &currlen, maxlen, strvalue, flags, min, max);
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
strvalue = (const char *) va_arg (args, const void *);
|
strvalue = (const char *) va_arg(args, const void *);
|
||||||
fmtint (buffer, &currlen, maxlen, (LLONG) (upx_uintptr_t) strvalue, 16, min, max, flags);
|
fmtint(buffer, &currlen, maxlen, (LLONG)(upx_uintptr_t) strvalue, 16, min, max,
|
||||||
|
flags);
|
||||||
break;
|
break;
|
||||||
case 'n':
|
case 'n':
|
||||||
if (cflags == DP_C_SHORT) {
|
if (cflags == DP_C_SHORT) {
|
||||||
short int *num;
|
short int *num;
|
||||||
num = va_arg (args, short int *);
|
num = va_arg(args, short int *);
|
||||||
*num = (short int)currlen;
|
*num = (short int) currlen;
|
||||||
} else if (cflags == DP_C_LONG) {
|
} else if (cflags == DP_C_LONG) {
|
||||||
long int *num;
|
long int *num;
|
||||||
num = va_arg (args, long int *);
|
num = va_arg(args, long int *);
|
||||||
*num = (long int)currlen;
|
*num = (long int) currlen;
|
||||||
} else if (cflags == DP_C_LLONG) {
|
} else if (cflags == DP_C_LLONG) {
|
||||||
LLONG *num;
|
LLONG *num;
|
||||||
num = va_arg (args, LLONG *);
|
num = va_arg(args, LLONG *);
|
||||||
*num = (LLONG)currlen;
|
*num = (LLONG) currlen;
|
||||||
} else {
|
} else {
|
||||||
int *num;
|
int *num;
|
||||||
num = va_arg (args, int *);
|
num = va_arg(args, int *);
|
||||||
*num = (int) currlen;
|
*num = (int) currlen;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '%':
|
case '%':
|
||||||
dopr_outch (buffer, &currlen, maxlen, ch);
|
dopr_outch(buffer, &currlen, maxlen, ch);
|
||||||
break;
|
break;
|
||||||
case 'w':
|
case 'w':
|
||||||
/* not supported yet, treat as next char */
|
/* not supported yet, treat as next char */
|
||||||
@@ -767,29 +756,26 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args
|
|||||||
return currlen;
|
return currlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
// public entries
|
// public entries
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
// UPX version with assertions
|
// UPX version with assertions
|
||||||
static int xdopr(char *buffer, size_t maxlen, const char *format, va_list args)
|
static int xdopr(char *buffer, size_t maxlen, const char *format, va_list args) {
|
||||||
{
|
|
||||||
size_t ret;
|
size_t ret;
|
||||||
|
|
||||||
// preconditions
|
// preconditions
|
||||||
assert(maxlen < INT_MAX);
|
assert(maxlen < INT_MAX);
|
||||||
if (buffer != NULL)
|
if (buffer != NULL)
|
||||||
assert((int)maxlen > 0);
|
assert((int) maxlen > 0);
|
||||||
else
|
else
|
||||||
assert(maxlen == 0);
|
assert(maxlen == 0);
|
||||||
|
|
||||||
ret = dopr(buffer, maxlen, format, args);
|
ret = dopr(buffer, maxlen, format, args);
|
||||||
|
|
||||||
// postconditions
|
// postconditions
|
||||||
if (buffer != NULL)
|
if (buffer != NULL) {
|
||||||
{
|
assert((int) ret >= 0);
|
||||||
assert((int)ret >= 0);
|
|
||||||
assert(ret < maxlen);
|
assert(ret < maxlen);
|
||||||
assert(buffer[ret] == '\0');
|
assert(buffer[ret] == '\0');
|
||||||
}
|
}
|
||||||
@@ -797,15 +783,11 @@ static int xdopr(char *buffer, size_t maxlen, const char *format, va_list args)
|
|||||||
return (int) ret;
|
return (int) ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int upx_vsnprintf(char *str, size_t count, const char *format, va_list ap) {
|
||||||
int upx_vsnprintf(char *str, size_t count, const char *format, va_list ap)
|
|
||||||
{
|
|
||||||
return xdopr(str, count, format, ap);
|
return xdopr(str, count, format, ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int __acc_cdecl_va upx_snprintf(char *str, size_t count, const char *format, ...) {
|
||||||
int __acc_cdecl_va upx_snprintf(char *str, size_t count, const char *format,...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@@ -815,28 +797,23 @@ int __acc_cdecl_va upx_snprintf(char *str, size_t count, const char *format,...)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int upx_vasprintf(char **ptr, const char *format, va_list ap) {
|
||||||
int upx_vasprintf(char **ptr, const char *format, va_list ap)
|
|
||||||
{
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
assert(ptr != NULL);
|
assert(ptr != NULL);
|
||||||
*ptr = NULL;
|
*ptr = NULL;
|
||||||
ret = xdopr(NULL, 0, format, ap);
|
ret = xdopr(NULL, 0, format, ap);
|
||||||
if (ret > 0)
|
if (ret > 0) {
|
||||||
{
|
|
||||||
*ptr = (char *) malloc(ret + 1);
|
*ptr = (char *) malloc(ret + 1);
|
||||||
assert(*ptr != NULL);
|
assert(*ptr != NULL);
|
||||||
if (*ptr == NULL)
|
if (*ptr == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
ret = xdopr(*ptr, ret+1, format, ap);
|
ret = xdopr(*ptr, ret + 1, format, ap);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int __acc_cdecl_va upx_asprintf(char **ptr, const char *format, ...) {
|
||||||
int __acc_cdecl_va upx_asprintf(char **ptr, const char *format, ...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@@ -846,7 +823,6 @@ int __acc_cdecl_va upx_asprintf(char **ptr, const char *format, ...)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
//
|
//
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
@@ -998,4 +974,3 @@ int main(void)
|
|||||||
/*
|
/*
|
||||||
vi:ts=4:et
|
vi:ts=4:et
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user