Loading...
--- Libc/Libc-262/stdio/local.h
+++ Libc/Libc-498/stdio/local.h
@@ -1,25 +1,4 @@
-/*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- *
- * The contents of this file constitute Original Code as defined in and
- * are subject to the Apple Public Source License Version 1.1 (the
- * "License"). You may not use this file except in compliance with the
- * License. Please obtain a copy of the License at
- * http://www.apple.com/publicsource and read it before using this file.
- *
- * This Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
- * License for the specific language governing rights and limitations
- * under the License.
- *
- * @APPLE_LICENSE_HEADER_END@
- */
-/*
+/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
*
@@ -53,37 +32,77 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
+ *
+ * @(#)local.h 8.3 (Berkeley) 7/3/94
+ * $FreeBSD: src/lib/libc/stdio/local.h,v 1.26 2004/07/16 05:52:51 tjr Exp $
*/
+
+#include <sys/cdefs.h>
+#include "xlocale_private.h"
+#include <sys/types.h> /* for off_t */
+#include <pthread.h>
+#include <limits.h>
+#include <string.h>
+#include <wchar.h>
/*
* Information local to this implementation of stdio,
* in particular, macros and private variables.
*/
-extern int __sflush __P((FILE *));
-extern FILE *__sfp __P((void));
-extern int __srefill __P((FILE *));
-extern int __sread __P((void *, char *, int));
-extern int __swrite __P((void *, char const *, int));
-extern fpos_t __sseek __P((void *, fpos_t, int));
-extern int __sclose __P((void *));
-extern void __sinit __P((void));
-extern void _cleanup __P((void));
-extern void (*__cleanup) __P((void));
-extern void __smakebuf __P((FILE *));
-extern int __swhatbuf __P((FILE *, size_t *, int *));
-extern int _fwalk __P((int (*)(FILE *)));
-extern int __swsetup __P((FILE *));
-extern int __sflags __P((const char *, int *));
+extern int _sread(FILE *, char *, int);
+extern int _swrite(FILE *, char const *, int);
+extern fpos_t _sseek(FILE *, fpos_t, int);
+extern int _ftello(FILE *, fpos_t *);
+extern int _fseeko(FILE *, off_t, int, int);
+extern int __fflush(FILE *fp);
+extern wint_t __fgetwc(FILE *, locale_t);
+extern wint_t __fputwc(wchar_t, FILE *, locale_t);
+extern int __sflush(FILE *);
+extern FILE *__sfp(void);
+extern int __slbexpand(FILE *, size_t);
+extern int __srefill(FILE *);
+extern int __sread(void *, char *, int);
+extern int __swrite(void *, char const *, int);
+extern fpos_t __sseek(void *, fpos_t, int);
+extern int __sclose(void *);
+extern void __sinit(void);
+extern void _cleanup(void);
+extern void (*__cleanup)(void);
+extern void __smakebuf(FILE *);
+extern int __swhatbuf(FILE *, size_t *, int *);
+extern int _fwalk(int (*)(FILE *));
+extern int __svfscanf_l(FILE *, locale_t, const char *, __va_list) __DARWIN_LDBL_COMPAT(__svfscanf_l);
+extern int __swsetup(FILE *);
+extern int __sflags(const char *, int *);
+extern int __ungetc(int, FILE *);
+extern wint_t __ungetwc(wint_t, FILE *, locale_t);
+extern int __vfprintf(FILE *, locale_t, const char *, __va_list) __DARWIN_LDBL_COMPAT(__vfprintf);
+extern int __vfscanf(FILE *, const char *, __va_list) __DARWIN_LDBL_COMPAT(__vfscanf);
+extern int __vfwprintf(FILE *, locale_t, const wchar_t *, __va_list) __DARWIN_LDBL_COMPAT(__vfwprintf);
+extern int __vfwscanf(FILE * __restrict, locale_t, const wchar_t * __restrict,
+ __va_list) __DARWIN_LDBL_COMPAT(__vfwscanf);
-extern int __sdidinit;
-extern void (*__cleanup) __P((void));
+extern int __sdidinit;
+
+
+/* hold a buncha junk that would grow the ABI */
+struct __sFILEX {
+ unsigned char *_up; /* saved _p when _p is doing ungetc data */
+ pthread_mutex_t fl_mutex; /* used for MT-safety */
+ pthread_t fl_owner; /* current owner */
+ int fl_count; /* recursive lock count */
+ int orientation; /* orientation for fwide() */
+ mbstate_t mbstate; /* multibyte conversion state */
+};
/*
- * Return true iff the given FILE cannot be written now.
+ * Prepare the given FILE for writing, and return 0 iff it
+ * can be written now. Otherwise, return EOF and set errno.
*/
-#define cantwrite(fp) \
- ((((fp)->_flags & __SWR) == 0 || (fp)->_bf._base == NULL) && \
+#define prepwrite(fp) \
+ ((((fp)->_flags & __SWR) == 0 || \
+ ((fp)->_bf._base == NULL && ((fp)->_flags & __SSTR) == 0)) && \
__swsetup(fp))
/*
@@ -105,3 +124,21 @@
free((char *)(fp)->_lb._base); \
(fp)->_lb._base = NULL; \
}
+
+#define INITEXTRA(fp) { \
+ (fp)->_extra->_up = NULL; \
+ (fp)->_extra->fl_mutex = (pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER; \
+ (fp)->_extra->fl_owner = NULL; \
+ (fp)->_extra->fl_count = 0; \
+ (fp)->_extra->orientation = 0; \
+ memset(&(fp)->_extra->mbstate, 0, sizeof(mbstate_t)); \
+}
+
+/*
+ * Set the orientation for a stream. If o > 0, the stream has wide-
+ * orientation. If o < 0, the stream has byte-orientation.
+ */
+#define ORIENT(fp, o) do { \
+ if ((fp)->_extra->orientation == 0) \
+ (fp)->_extra->orientation = (o); \
+} while (0)