Revision: 50702
http://brlcad.svn.sourceforge.net/brlcad/?rev=50702&view=rev
Author: tbrowder2
Date: 2012-05-26 18:23:59 +0000 (Sat, 26 May 2012)
Log Message:
-----------
converted all flag variables in function bu_vls_vprintf to be contained in a
special struct; added a reset function for them
Modified Paths:
--------------
brlcad/trunk/src/libbu/vls.c
Modified: brlcad/trunk/src/libbu/vls.c
===================================================================
--- brlcad/trunk/src/libbu/vls.c 2012-05-26 17:55:57 UTC (rev 50701)
+++ brlcad/trunk/src/libbu/vls.c 2012-05-26 18:23:59 UTC (rev 50702)
@@ -743,6 +743,28 @@
}
#endif
+typedef struct
+vprintf_flags
+{
+ int fieldlen;
+ int flags;
+ int have_digit;
+ int have_dot;
+ int left_justify;
+ int precision;
+} vflags_t;
+
+static void reset_vflags(vflags_t *f);
+static void reset_vflags(vflags_t *f)
+{
+ f->fieldlen = -1;
+ f->flags = 0;
+ f->have_digit = 0;
+ f->have_dot = 0;
+ f->left_justify = 0;
+ f->precision = 0;
+}
+
void
bu_vls_vprintf(struct bu_vls *vls, const char *fmt, va_list ap)
{
@@ -775,13 +797,8 @@
#define ALL_DOUBLEMODS (LONGDBLE)
#define ALL_LENGTHMODS (ALL_INTMODS | ALL_DOUBLEMODS)
- /* variables reset for each fmt specifier */
- int fieldlen = -1;
- int flags = 0;
- int have_digit = 0;
- int have_dot = 0;
- int left_justify = 0;
- int precision = 0;
+ /* flag variables are reset for each fmt specifier */
+ vflags_t f;
char buf[BUFSIZ] = {0};
char c;
@@ -813,12 +830,7 @@
/* Saw a percent sign, now need to find end of fmt specifier */
/* All flags get reset for this fmt specifier */
- fieldlen = -1;
- flags = 0;
- have_digit = 0;
- have_dot = 0;
- left_justify = 0;
- precision = 0;
+ reset_vflags(&f);
ep = sp;
while ((c = *(++ep))) {
@@ -830,20 +842,20 @@
|| isdigit(c)) {
/* need to set flags for some of these */
if (c == '.') {
- have_dot = 1;
+ f.have_dot = 1;
} else if (isdigit(c)) {
/* set flag for later error checks */
- have_digit = 1;
+ f.have_digit = 1;
}
continue;
} else if (c == '-') {
/* the first occurrence before a dot is the
left-justify flag, but the occurrence AFTER a dot is
taken to be zero precision */
- if (have_dot) {
- precision = 0;
- have_digit = 0;
- } else if (have_digit) {
+ if (f.have_dot) {
+ f.precision = 0;
+ f.have_digit = 0;
+ } else if (f.have_digit) {
/* FIXME: ERROR condition?: invalid format string
(e.g., '%7.8-f') */
/* seems as if the fprintf man page is indefinite here,
@@ -851,54 +863,54 @@
appears in output */
;
} else {
- left_justify = 1;
+ f.left_justify = 1;
}
} else if (c == '*') {
/* the first occurrence is the field width, but the
second occurrence is the precision specifier */
- if (!have_dot) {
- fieldlen = va_arg(ap, int);
- flags |= FIELDLEN;
+ if (!f.have_dot) {
+ f.fieldlen = va_arg(ap, int);
+ f.flags |= FIELDLEN;
}
else {
- precision = va_arg(ap, int);
- flags |= PRECISION;
+ f.precision = va_arg(ap, int);
+ f.flags |= PRECISION;
}
/* all length modifiers below here */
} else if (c == 'j') {
- flags |= INTMAX_T;
+ f.flags |= INTMAX_T;
} else if (c == 't') {
- flags |= PTRDIFFT;
+ f.flags |= PTRDIFFT;
} else if (c == 'z') {
- flags |= SIZETINT;
+ f.flags |= SIZETINT;
} else if (c == 'l') {
/* 'l' can be doubled */
/* clear all length modifiers AFTER we check for the
first 'l' */
- if (flags & LONG_INT) {
- flags ^= ALL_LENGTHMODS;
- flags |= LLONGINT;
+ if (f.flags & LONG_INT) {
+ f.flags ^= ALL_LENGTHMODS;
+ f.flags |= LLONGINT;
} else {
- flags ^= ALL_LENGTHMODS;
- flags |= LONG_INT;
+ f.flags ^= ALL_LENGTHMODS;
+ f.flags |= LONG_INT;
}
} else if (c == 'h') {
/* 'h' can be doubled */
/* clear all length modifiers AFTER we check for the
first 'h' */
- if (flags & SHORTINT) {
- flags ^= ALL_LENGTHMODS;
- flags |= SHHRTINT;
+ if (f.flags & SHORTINT) {
+ f.flags ^= ALL_LENGTHMODS;
+ f.flags |= SHHRTINT;
} else {
- flags ^= ALL_LENGTHMODS;
- flags |= SHORTINT;
+ f.flags ^= ALL_LENGTHMODS;
+ f.flags |= SHORTINT;
}
} else if (c == 'L') {
/* a length modifier for doubles */
/* clear all length modifiers first */
- flags ^= ALL_LENGTHMODS;
+ f.flags ^= ALL_LENGTHMODS;
/* set the new flag */
- flags |= LONGDBLE;
+ f.flags |= LONGDBLE;
} else
/* Anything else must be the end of the fmt specifier */
break;
@@ -908,9 +920,9 @@
* value is already negative, so no need to check current value
* of left_justify.
*/
- if (fieldlen < 0) {
- fieldlen = -fieldlen;
- left_justify = 1;
+ if (f.fieldlen < 0) {
+ f.fieldlen = -f.fieldlen;
+ f.left_justify = 1;
}
/* Copy off this entire format string specifier */
@@ -928,7 +940,7 @@
* compiler.
*/
- if (flags & SIZETINT) {
+ if (f.flags & SIZETINT) {
char *fp = fbufp;
while (*fp) {
if (*fp == '%') {
@@ -983,11 +995,11 @@
/* for strings only */
/* field length is a minimum size and precision is
max length of string to be printed */
- if (flags & FIELDLEN) {
- minfldwid = fieldlen;
+ if (f.flags & FIELDLEN) {
+ minfldwid = f.fieldlen;
}
- if (flags & PRECISION) {
- maxstrlen = precision;
+ if (f.flags & PRECISION) {
+ maxstrlen = f.precision;
}
if (str) {
int stringlen = (int)strlen(str);
@@ -1015,7 +1027,7 @@
struct bu_vls padded = BU_VLS_INIT_ZERO;
int i;
- if (left_justify) {
+ if (f.left_justify) {
/* string goes before padding spaces */
bu_vls_vlscat(&padded, &tmpstr);
}
@@ -1023,7 +1035,7 @@
for (i = 0; i < minfldwid - stringlen; ++i) {
bu_vls_putc(&padded, ' ');
}
- if (!left_justify) {
+ if (!f.left_justify) {
/* string follows the padding spaces */
bu_vls_vlscat(&padded, &tmpstr);
}
@@ -1041,15 +1053,15 @@
} else {
/* handle an empty string */
/* FIXME: should we trunc to precision if > fieldlen?
*/
- if (flags & FIELDLEN) {
- bu_vls_strncat(vls, "(null)", (size_t)fieldlen);
+ if (f.flags & FIELDLEN) {
+ bu_vls_strncat(vls, "(null)", (size_t)f.fieldlen);
} else {
bu_vls_strcat(vls, "(null)");
}
}
}
break;
- case 'S': /* XXX - DEPRECATED [7.14] */
+ case 'S':/* XXX - DEPRECATED [7.14] */
printf("DEVELOPER DEPRECATION NOTICE: Using %%S for string
printing is deprecated, use %%V instead\n");
/* fall through */
case 'V':
@@ -1059,20 +1071,20 @@
vp = va_arg(ap, struct bu_vls *);
if (vp) {
BU_CK_VLS(vp);
- if (flags & FIELDLEN) {
+ if (f.flags & FIELDLEN) {
int stringlen = bu_vls_strlen(vp);
- if (stringlen >= fieldlen)
- bu_vls_strncat(vls, bu_vls_addr(vp),
(size_t)fieldlen);
+ if (stringlen >= f.fieldlen)
+ bu_vls_strncat(vls, bu_vls_addr(vp),
(size_t)f.fieldlen);
else {
struct bu_vls padded = BU_VLS_INIT_ZERO;
int i;
- if (left_justify)
+ if (f.left_justify)
bu_vls_vlscat(&padded, vp);
- for (i = 0; i < fieldlen - stringlen; ++i)
+ for (i = 0; i < f.fieldlen - stringlen; ++i)
bu_vls_putc(&padded, ' ');
- if (!left_justify)
+ if (!f.left_justify)
bu_vls_vlscat(&padded, vp);
bu_vls_vlscat(vls, &padded);
}
@@ -1080,8 +1092,8 @@
bu_vls_vlscat(vls, vp);
}
} else {
- if (flags & FIELDLEN)
- bu_vls_strncat(vls, "(null)", (size_t)fieldlen);
+ if (f.flags & FIELDLEN)
+ bu_vls_strncat(vls, "(null)", (size_t)f.fieldlen);
else
bu_vls_strcat(vls, "(null)");
}
@@ -1096,8 +1108,8 @@
/* All floating point ==> "double" */
{
double d = va_arg(ap, double);
- if (flags & FIELDLEN)
- snprintf(buf, BUFSIZ, fbufp, fieldlen, d);
+ if (f.flags & FIELDLEN)
+ snprintf(buf, BUFSIZ, fbufp, f.fieldlen, d);
else
snprintf(buf, BUFSIZ, fbufp, d);
}
@@ -1107,50 +1119,50 @@
case 'u':
case 'x':
case 'X':
- if (flags & LONG_INT) {
+ if (f.flags & LONG_INT) {
/* Unsigned long int */
unsigned long l = va_arg(ap, unsigned long);
- if (flags & FIELDLEN)
- snprintf(buf, BUFSIZ, fbufp, fieldlen, l);
+ if (f.flags & FIELDLEN)
+ snprintf(buf, BUFSIZ, fbufp, f.fieldlen, l);
else
snprintf(buf, BUFSIZ, fbufp, l);
- } else if (flags & LLONGINT) {
+ } else if (f.flags & LLONGINT) {
/* Unsigned long long int */
unsigned long long ll = va_arg(ap, unsigned long long);
- if (flags & FIELDLEN)
- snprintf(buf, BUFSIZ, fbufp, fieldlen, ll);
+ if (f.flags & FIELDLEN)
+ snprintf(buf, BUFSIZ, fbufp, f.fieldlen, ll);
else
snprintf(buf, BUFSIZ, fbufp, ll);
- } else if (flags & SHORTINT || flags & SHHRTINT) {
+ } else if (f.flags & SHORTINT || f.flags & SHHRTINT) {
/* unsigned short int */
unsigned short int sh = (unsigned short int)va_arg(ap, int);
- if (flags & FIELDLEN)
- snprintf(buf, BUFSIZ, fbufp, fieldlen, sh);
+ if (f.flags & FIELDLEN)
+ snprintf(buf, BUFSIZ, fbufp, f.fieldlen, sh);
else
snprintf(buf, BUFSIZ, fbufp, sh);
- } else if (flags & INTMAX_T) {
+ } else if (f.flags & INTMAX_T) {
intmax_t im = va_arg(ap, intmax_t);
- if (flags & FIELDLEN)
- snprintf(buf, BUFSIZ, fbufp, fieldlen, im);
+ if (f.flags & FIELDLEN)
+ snprintf(buf, BUFSIZ, fbufp, f.fieldlen, im);
else
snprintf(buf, BUFSIZ, fbufp, im);
- } else if (flags & PTRDIFFT) {
+ } else if (f.flags & PTRDIFFT) {
ptrdiff_t pd = va_arg(ap, ptrdiff_t);
- if (flags & FIELDLEN)
- snprintf(buf, BUFSIZ, fbufp, fieldlen, pd);
+ if (f.flags & FIELDLEN)
+ snprintf(buf, BUFSIZ, fbufp, f.fieldlen, pd);
else
snprintf(buf, BUFSIZ, fbufp, pd);
- } else if (flags & SIZETINT) {
+ } else if (f.flags & SIZETINT) {
size_t st = va_arg(ap, size_t);
- if (flags & FIELDLEN)
- snprintf(buf, BUFSIZ, fbufp, fieldlen, st);
+ if (f.flags & FIELDLEN)
+ snprintf(buf, BUFSIZ, fbufp, f.fieldlen, st);
else
snprintf(buf, BUFSIZ, fbufp, st);
} else {
/* Regular unsigned int */
unsigned int j = (unsigned int)va_arg(ap, unsigned int);
- if (flags & FIELDLEN)
- snprintf(buf, BUFSIZ, fbufp, fieldlen, j);
+ if (f.flags & FIELDLEN)
+ snprintf(buf, BUFSIZ, fbufp, f.fieldlen, j);
else
snprintf(buf, BUFSIZ, fbufp, j);
}
@@ -1158,50 +1170,50 @@
break;
case 'd':
case 'i':
- if (flags & LONG_INT) {
+ if (f.flags & LONG_INT) {
/* Long int */
long l = va_arg(ap, long);
- if (flags & FIELDLEN)
- snprintf(buf, BUFSIZ, fbufp, fieldlen, l);
+ if (f.flags & FIELDLEN)
+ snprintf(buf, BUFSIZ, fbufp, f.fieldlen, l);
else
snprintf(buf, BUFSIZ, fbufp, l);
- } else if (flags & LLONGINT) {
+ } else if (f.flags & LLONGINT) {
/* Long long int */
long long ll = va_arg(ap, long long);
- if (flags & FIELDLEN)
- snprintf(buf, BUFSIZ, fbufp, fieldlen, ll);
+ if (f.flags & FIELDLEN)
+ snprintf(buf, BUFSIZ, fbufp, f.fieldlen, ll);
else
snprintf(buf, BUFSIZ, fbufp, ll);
- } else if (flags & SHORTINT || flags & SHHRTINT) {
+ } else if (f.flags & SHORTINT || f.flags & SHHRTINT) {
/* short int */
short int sh = (short int)va_arg(ap, int);
- if (flags & FIELDLEN)
- snprintf(buf, BUFSIZ, fbufp, fieldlen, sh);
+ if (f.flags & FIELDLEN)
+ snprintf(buf, BUFSIZ, fbufp, f.fieldlen, sh);
else
snprintf(buf, BUFSIZ, fbufp, sh);
- } else if (flags & INTMAX_T) {
+ } else if (f.flags & INTMAX_T) {
intmax_t im = va_arg(ap, intmax_t);
- if (flags & FIELDLEN)
- snprintf(buf, BUFSIZ, fbufp, fieldlen, im);
+ if (f.flags & FIELDLEN)
+ snprintf(buf, BUFSIZ, fbufp, f.fieldlen, im);
else
snprintf(buf, BUFSIZ, fbufp, im);
- } else if (flags & PTRDIFFT) {
+ } else if (f.flags & PTRDIFFT) {
ptrdiff_t pd = va_arg(ap, ptrdiff_t);
- if (flags & FIELDLEN)
- snprintf(buf, BUFSIZ, fbufp, fieldlen, pd);
+ if (f.flags & FIELDLEN)
+ snprintf(buf, BUFSIZ, fbufp, f.fieldlen, pd);
else
snprintf(buf, BUFSIZ, fbufp, pd);
- } else if (flags & SIZETINT) {
+ } else if (f.flags & SIZETINT) {
size_t st = va_arg(ap, size_t);
- if (flags & FIELDLEN)
- snprintf(buf, BUFSIZ, fbufp, fieldlen, st);
+ if (f.flags & FIELDLEN)
+ snprintf(buf, BUFSIZ, fbufp, f.fieldlen, st);
else
snprintf(buf, BUFSIZ, fbufp, st);
} else {
/* Regular int */
int j = va_arg(ap, int);
- if (flags & FIELDLEN)
- snprintf(buf, BUFSIZ, fbufp, fieldlen, j);
+ if (f.flags & FIELDLEN)
+ snprintf(buf, BUFSIZ, fbufp, f.fieldlen, j);
else
snprintf(buf, BUFSIZ, fbufp, j);
}
@@ -1212,8 +1224,8 @@
/* all pointer == "void *" */
{
void *vp = (void *)va_arg(ap, void *);
- if (flags & FIELDLEN)
- snprintf(buf, BUFSIZ, fbufp, fieldlen, vp);
+ if (f.flags & FIELDLEN)
+ snprintf(buf, BUFSIZ, fbufp, f.fieldlen, vp);
else
snprintf(buf, BUFSIZ, fbufp, vp);
}
@@ -1228,8 +1240,8 @@
/* We hope, whatever it is, it fits in an int and the
resulting
stringlet is smaller than sizeof(buf) bytes */
int j = va_arg(ap, int);
- if (flags & FIELDLEN)
- snprintf(buf, BUFSIZ, fbufp, fieldlen, j);
+ if (f.flags & FIELDLEN)
+ snprintf(buf, BUFSIZ, fbufp, f.fieldlen, j);
else
snprintf(buf, BUFSIZ, fbufp, j);
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits