summaryrefslogtreecommitdiffstats
path: root/contrib/tcsh/tc.printf.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/tcsh/tc.printf.c')
-rw-r--r--contrib/tcsh/tc.printf.c74
1 files changed, 52 insertions, 22 deletions
diff --git a/contrib/tcsh/tc.printf.c b/contrib/tcsh/tc.printf.c
index 7643251..a6f130a 100644
--- a/contrib/tcsh/tc.printf.c
+++ b/contrib/tcsh/tc.printf.c
@@ -1,4 +1,4 @@
-/* $Header: /src/pub/tcsh/tc.printf.c,v 3.21 2001/06/21 23:26:54 kim Exp $ */
+/* $Header: /src/pub/tcsh/tc.printf.c,v 3.23 2002/03/08 17:36:47 christos Exp $ */
/*
* tc.printf.c: A public-domain, minimal printf/sprintf routine that prints
* through the putchar() routine. Feel free to use for
@@ -16,11 +16,7 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -38,7 +34,7 @@
*/
#include "sh.h"
-RCSID("$Id: tc.printf.c,v 3.21 2001/06/21 23:26:54 kim Exp $")
+RCSID("$Id: tc.printf.c,v 3.23 2002/03/08 17:36:47 christos Exp $")
#ifdef lint
#undef va_arg
@@ -58,16 +54,21 @@ doprnt(addchar, sfmt, ap)
const char *sfmt;
va_list ap;
{
- register char *bp;
- register const char *f;
+ char *bp;
+ const char *f;
#ifdef SHORT_STRINGS
- register Char *Bp;
+ Char *Bp;
#endif /* SHORT_STRINGS */
- register long l;
- register unsigned long u;
- register int i;
- register int fmt;
- register unsigned char pad = ' ';
+#ifdef HAVE_QUAD
+ long long l;
+ unsigned long long u;
+#else
+ long l;
+ unsigned long u;
+#endif
+ int i;
+ int fmt;
+ unsigned char pad = ' ';
int flush_left = 0, f_width = 0, prec = INF, hash = 0, do_long = 0;
int sign = 0;
int attributes = 0;
@@ -120,8 +121,12 @@ doprnt(addchar, sfmt, ap)
}
if (*f == 'l') { /* long format */
- do_long = 1;
+ do_long++;
f++;
+ if (*f == 'l') {
+ do_long++;
+ f++;
+ }
}
fmt = (unsigned char) *f;
@@ -132,10 +137,23 @@ doprnt(addchar, sfmt, ap)
bp = buf;
switch (fmt) { /* do the format */
case 'd':
- if (do_long)
- l = va_arg(ap, long);
- else
+ switch (do_long) {
+ case 0:
l = (long) (va_arg(ap, int));
+ break;
+ case 1:
+#ifndef HAVE_QUAD
+ default:
+#endif
+ l = va_arg(ap, long);
+ break;
+#ifdef HAVE_QUAD
+ default:
+ l = va_arg(ap, long long);
+ break;
+#endif
+ }
+
if (l < 0) {
sign = 1;
l = -l;
@@ -159,10 +177,22 @@ doprnt(addchar, sfmt, ap)
case 'o':
case 'x':
case 'u':
- if (do_long)
- u = va_arg(ap, unsigned long);
- else
+ switch (do_long) {
+ case 0:
u = (unsigned long) (va_arg(ap, unsigned int));
+ break;
+ case 1:
+#ifndef HAVE_QUAD
+ default:
+#endif
+ u = va_arg(ap, unsigned long);
+ break;
+#ifdef HAVE_QUAD
+ default:
+ u = va_arg(ap, unsigned long long);
+ break;
+#endif
+ }
if (fmt == 'u') { /* unsigned decimal */
do {
*bp++ = (char) (u % 10) + '0';
OpenPOWER on IntegriCloud