summaryrefslogtreecommitdiff
path: root/usr/src/lib/libbc/libc/stdio/common/scanf.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libbc/libc/stdio/common/scanf.c')
-rw-r--r--usr/src/lib/libbc/libc/stdio/common/scanf.c82
1 files changed, 45 insertions, 37 deletions
diff --git a/usr/src/lib/libbc/libc/stdio/common/scanf.c b/usr/src/lib/libbc/libc/stdio/common/scanf.c
index 0a54f708d4..e024fb7c4f 100644
--- a/usr/src/lib/libbc/libc/stdio/common/scanf.c
+++ b/usr/src/lib/libbc/libc/stdio/common/scanf.c
@@ -19,9 +19,9 @@
*
* CDDL HEADER END
*/
-/*
- * Copyright (c) 1995, by Sun Microsystems, Inc.
- * All rights reserved.
+/*
+ * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
*/
/* Copyright (c) 1984 AT&T */
@@ -32,8 +32,10 @@
/*LINTLIBRARY*/
#include <stdio.h>
#include <ctype.h>
-#include <varargs.h>
+#include <stdarg.h>
#include <errno.h>
+#include <string.h>
+#include <malloc.h>
#define ON 1
#define OFF 0
@@ -41,99 +43,106 @@
#define ARGMAX 64
static unsigned char newap[ARGMAX * sizeof(double)];
static unsigned char newform[256];
-extern char *strcpy();
-extern char *malloc();
extern int _doscan();
-static int format_arg();
-/*VARARGS1*/
+static int format_arg(unsigned char *, unsigned char *, unsigned char *);
+
int
-scanf(fmt, va_alist)
-char *fmt;
-va_dcl
+scanf(char *fmt, ...)
{
va_list ap;
char *nf;
int ret_val;
+
- va_start(ap);
+ va_start(ap, fmt);
if (strlen(fmt) >= sizeof(newform)) {
nf = malloc(strlen(fmt)+1);
- if (format_arg(strcpy(nf, fmt), ap, newap) == ON) {
+ if (format_arg((unsigned char *)strcpy(nf, fmt), ap, newap)
+ == ON) {
+ va_end(ap);
ret_val = _doscan(stdin, nf, newap);
free(nf);
return(ret_val);
}
free(nf);
- } else if (format_arg(strcpy(newform, fmt), ap, newap) == ON) {
+ } else if (format_arg((unsigned char *)strcpy(newform, fmt), ap, newap)
+ == ON) {
+ va_end(ap);
return(_doscan(stdin, newform, newap));
}
- return(_doscan(stdin, fmt, ap));
+ ret_val = _doscan(stdin, fmt, ap);
+ va_end(ap);
+ return (ret_val);
}
-/*VARARGS2*/
int
-fscanf(iop, fmt, va_alist)
-FILE *iop;
-char *fmt;
-va_dcl
+fscanf(FILE *iop, char *fmt, ...)
{
va_list ap;
char *nf;
int ret_val;
- va_start(ap);
#ifdef POSIX
if ( !(iop->_flag & (_IOREAD|_IORW)) ) {
iop->_flag |= _IOERR;
errno = EBADF;
return (EOF);
}
-#endif POSIX
+#endif /* POSIX */
+ va_start(ap, fmt);
if (strlen(fmt) >= sizeof(newform)) {
nf = malloc(strlen(fmt)+1);
- if (format_arg(strcpy(nf, fmt), ap, newap) == ON) {
+ if (format_arg((unsigned char *)strcpy(nf, fmt), ap, newap)
+ == ON) {
+ va_end(ap);
ret_val = _doscan(stdin, nf, newap);
free(nf);
return(ret_val);
}
free(nf);
- } else if (format_arg(strcpy(newform, fmt), ap, newap) == ON) {
+ } else if (format_arg((unsigned char *)strcpy(newform, fmt), ap, newap)
+ == ON) {
+ va_end(ap);
return(_doscan(iop, newform, newap));
}
- return(_doscan(iop, fmt, ap));
+ ret_val = _doscan(iop, fmt, ap);
+ va_end(ap);
+ return (ret_val);
}
-/*VARARGS2*/
int
-sscanf(str, fmt, va_alist)
-register char *str;
-char *fmt;
-va_dcl
+sscanf(char *str, char *fmt, ...)
{
va_list ap;
FILE strbuf;
char *nf;
int ret_val;
- va_start(ap);
+ va_start(ap, fmt);
strbuf._flag = _IOREAD|_IOSTRG;
strbuf._ptr = strbuf._base = (unsigned char*)str;
strbuf._cnt = strlen(str);
strbuf._bufsiz = strbuf._cnt;
if (strlen(fmt) >= sizeof(newform)) {
nf = malloc(strlen(fmt)+1);
- if (format_arg(strcpy(nf, fmt), ap, newap) == ON) {
+ if (format_arg((unsigned char *)strcpy(nf, fmt), ap, newap)
+ == ON) {
+ va_end(ap);
ret_val = _doscan(stdin, nf, newap);
free(nf);
return(ret_val);
}
free(nf);
- } else if (format_arg(strcpy(newform, fmt), ap, newap) == ON) {
+ } else if (format_arg((unsigned char *)strcpy(newform, fmt), ap, newap)
+ == ON) {
+ va_end(ap);
return(_doscan(&strbuf, newform, newap));
}
- return(_doscan(&strbuf, fmt, ap));
+ ret_val = _doscan(&strbuf, fmt, ap);
+ va_end(ap);
+ return (ret_val);
}
/*
@@ -153,11 +162,10 @@ struct al {
};
static int
-format_arg(format, list, newlist)
-unsigned char *format, *list, *newlist;
+format_arg(unsigned char *format, unsigned char *list, unsigned char *newlist)
{
unsigned char *aptr, *bptr, *cptr;
- register i, fcode, nl_fmt, num, length, j;
+ int i, fcode, nl_fmt, num, length, j;
unsigned char *fmtsav;
struct al args[ARGMAX + 1];