1*c2fb3212Sespie /* $OpenBSD: fileext.h,v 1.2 2005/06/17 20:40:32 espie Exp $ */ 2685aea3cSespie /* $NetBSD: fileext.h,v 1.5 2003/07/18 21:46:41 nathanw Exp $ */ 3685aea3cSespie 4685aea3cSespie /*- 5685aea3cSespie * Copyright (c)2001 Citrus Project, 6685aea3cSespie * All rights reserved. 7685aea3cSespie * 8685aea3cSespie * Redistribution and use in source and binary forms, with or without 9685aea3cSespie * modification, are permitted provided that the following conditions 10685aea3cSespie * are met: 11685aea3cSespie * 1. Redistributions of source code must retain the above copyright 12685aea3cSespie * notice, this list of conditions and the following disclaimer. 13685aea3cSespie * 2. Redistributions in binary form must reproduce the above copyright 14685aea3cSespie * notice, this list of conditions and the following disclaimer in the 15685aea3cSespie * documentation and/or other materials provided with the distribution. 16685aea3cSespie * 17685aea3cSespie * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18685aea3cSespie * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19685aea3cSespie * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20685aea3cSespie * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21685aea3cSespie * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22685aea3cSespie * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23685aea3cSespie * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24685aea3cSespie * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25685aea3cSespie * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26685aea3cSespie * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27685aea3cSespie * SUCH DAMAGE. 28685aea3cSespie * 29685aea3cSespie * $Citrus$ 30685aea3cSespie */ 31685aea3cSespie 32685aea3cSespie /* 33685aea3cSespie * file extension 34685aea3cSespie */ 35685aea3cSespie struct __sfileext { 36685aea3cSespie struct __sbuf _ub; /* ungetc buffer */ 37*c2fb3212Sespie struct wchar_io_data _wcio; /* wide char io status */ 38685aea3cSespie }; 39685aea3cSespie 40685aea3cSespie #define _EXT(fp) ((struct __sfileext *)((fp)->_ext._base)) 41685aea3cSespie #define _UB(fp) _EXT(fp)->_ub 42*c2fb3212Sespie 43*c2fb3212Sespie #define _FILEEXT_INIT(fp) \ 44*c2fb3212Sespie do { \ 45*c2fb3212Sespie _UB(fp)._base = NULL; \ 46*c2fb3212Sespie _UB(fp)._size = 0; \ 47*c2fb3212Sespie WCIO_INIT(fp); \ 48*c2fb3212Sespie } while (0) 49*c2fb3212Sespie 50*c2fb3212Sespie #define _FILEEXT_SETUP(f, fext) \ 51*c2fb3212Sespie do { \ 52*c2fb3212Sespie (f)->_ext._base = (unsigned char *)(fext); \ 53*c2fb3212Sespie _FILEEXT_INIT(f); \ 54*c2fb3212Sespie } while (0) 55