t2ex/bsd_source/lib/libc/src_bsd/stdio/wcio.h | bare source | permlink (0.00 seconds) |
1: /* $OpenBSD: wcio.h,v 1.1 2005/06/17 20:40:32 espie Exp $ */ 2: /* $NetBSD: wcio.h,v 1.3 2003/01/18 11:30:00 thorpej Exp $ */ 3: 4: /*- 5: * Copyright (c)2001 Citrus Project, 6: * All rights reserved. 7: * 8: * Redistribution and use in source and binary forms, with or without 9: * modification, are permitted provided that the following conditions 10: * are met: 11: * 1. Redistributions of source code must retain the above copyright 12: * notice, this list of conditions and the following disclaimer. 13: * 2. Redistributions in binary form must reproduce the above copyright 14: * notice, this list of conditions and the following disclaimer in the 15: * documentation and/or other materials provided with the distribution. 16: * 17: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20: * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27: * SUCH DAMAGE. 28: * 29: * $Citrus$ 30: */ 31: 32: #ifndef _WCIO_H_ 33: #define _WCIO_H_ 34: 35: /* minimal requirement of SUSv2 */ 36: #define WCIO_UNGETWC_BUFSIZE 1 37: 38: struct wchar_io_data { 39: mbstate_t wcio_mbstate_in; 40: mbstate_t wcio_mbstate_out; 41: 42: wchar_t wcio_ungetwc_buf[WCIO_UNGETWC_BUFSIZE]; 43: size_t wcio_ungetwc_inbuf; 44: 45: int wcio_mode; /* orientation */ 46: }; 47: 48: #define WCIO_GET(fp) \ 49: (_EXT(fp) ? &(_EXT(fp)->_wcio) : (struct wchar_io_data *)0) 50: 51: #define _SET_ORIENTATION(fp, mode) \ 52: do {\ 53: struct wchar_io_data *_wcio = WCIO_GET(fp); \ 54: if (_wcio && _wcio->wcio_mode == 0) \ 55: _wcio->wcio_mode = (mode);\ 56: } while (0) 57: 58: /* 59: * WCIO_FREE should be called by fclose 60: */ 61: #define WCIO_FREE(fp) \ 62: do {\ 63: struct wchar_io_data *_wcio = WCIO_GET(fp); \ 64: if (_wcio) { \ 65: _wcio->wcio_mode = 0;\ 66: _wcio->wcio_ungetwc_inbuf = 0;\ 67: } \ 68: } while (0) 69: 70: #define WCIO_FREEUB(fp) \ 71: do {\ 72: struct wchar_io_data *_wcio = WCIO_GET(fp); \ 73: if (_wcio) { \ 74: _wcio->wcio_ungetwc_inbuf = 0;\ 75: } \ 76: } while (0) 77: 78: #define WCIO_INIT(fp) \ 79: memset(WCIO_GET(fp), 0, sizeof(struct wchar_io_data)) 80: 81: #endif /*_WCIO_H_*/