Home | History | Annotate | Download | only in stdio
      1 /*
      2  * CDDL HEADER START
      3  *
      4  * The contents of this file are subject to the terms of the
      5  * Common Development and Distribution License (the "License").
      6  * You may not use this file except in compliance with the License.
      7  *
      8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9  * or http://www.opensolaris.org/os/licensing.
     10  * See the License for the specific language governing permissions
     11  * and limitations under the License.
     12  *
     13  * When distributing Covered Code, include this CDDL HEADER in each
     14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15  * If applicable, add the following below this CDDL HEADER, with the
     16  * fields enclosed by brackets "[]" replaced with your own identifying
     17  * information: Portions Copyright [yyyy] [name of copyright owner]
     18  *
     19  * CDDL HEADER END
     20  */
     21 
     22 /*
     23  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
     24  * Use is subject to license terms.
     25  */
     26 
     27 /*	Copyright (c) 1988 AT&T	*/
     28 /*	  All Rights Reserved  	*/
     29 
     30 #pragma ident	"%Z%%M%	%I%	%E% SMI"
     31 
     32 #include "lint.h"
     33 #include "file64.h"
     34 #include "mtlib.h"
     35 #include <stdio.h>
     36 #include <stdarg.h>
     37 #include <string.h>
     38 #include <thread.h>
     39 #include <synch.h>
     40 #include "libc.h"
     41 #include "stdiom.h"
     42 #include "mse.h"
     43 #include <stdio_ext.h>
     44 
     45 /*VARARGS1*/
     46 int
     47 scanf(const char *fmt, ...)
     48 {
     49 	int ret;
     50 	va_list ap;
     51 
     52 	va_start(ap, fmt);
     53 	ret = vscanf(fmt, ap);
     54 	va_end(ap);
     55 
     56 	return (ret);
     57 }
     58 
     59 /*VARARGS2*/
     60 int
     61 fscanf(FILE *iop, const char *fmt, ...)
     62 {
     63 	int ret;
     64 	va_list ap;
     65 
     66 	va_start(ap, fmt);
     67 	ret = vfscanf(iop, fmt, ap);
     68 	va_end(ap);
     69 
     70 	return (ret);
     71 }
     72 
     73 /*VARARGS2*/
     74 int
     75 sscanf(const char *str, const char *fmt, ...)
     76 {
     77 	int ret;
     78 	va_list ap;
     79 
     80 	va_start(ap, fmt);
     81 	ret = vsscanf(str, fmt, ap);
     82 	va_end(ap);
     83 
     84 	return (ret);
     85 }
     86 
     87 #ifndef _LP64
     88 
     89 /*
     90  * 32-bit shadow functions _scanf_c89(), _fscanf_c89(), _sscanf_c89()
     91  * included here.
     92  * When using the c89 compiler to build 32-bit applications, the size
     93  * of intmax_t is 32-bits, otherwise the size of intmax_t is 64-bits.
     94  * The shadow function uses 32-bit size of intmax_t for %j conversion.
     95  * The #pragma redefine_extname in <stdio.h> selects the proper routine
     96  * at compile time for the user application.
     97  * NOTE: the shadow function only exists in the 32-bit library.
     98  */
     99 
    100 int
    101 _scanf_c89(const char *fmt, ...)
    102 {
    103 	int ret;
    104 	va_list ap;
    105 
    106 	va_start(ap, fmt);
    107 	ret = _vscanf_c89(fmt, ap);
    108 	va_end(ap);
    109 
    110 	return (ret);
    111 }
    112 
    113 int
    114 _fscanf_c89(FILE *iop, const char *fmt, ...)
    115 {
    116 	int ret;
    117 	va_list ap;
    118 
    119 	va_start(ap, fmt);
    120 	ret = _vfscanf_c89(iop, fmt, ap);
    121 	va_end(ap);
    122 
    123 	return (ret);
    124 }
    125 
    126 int
    127 _sscanf_c89(const char *str, const char *fmt, ...)
    128 {
    129 	int ret;
    130 	va_list ap;
    131 
    132 	va_start(ap, fmt);
    133 	ret = _vsscanf_c89(str, fmt, ap);
    134 	va_end(ap);
    135 
    136 	return (ret);
    137 }
    138 
    139 #endif	/* _LP64 */
    140