12591efccSDavid Schultz /*- 28a16b7a1SPedro F. Giffuni * SPDX-License-Identifier: BSD-3-Clause 38a16b7a1SPedro F. Giffuni * 42591efccSDavid Schultz * Copyright (c) 1990, 1993 52591efccSDavid Schultz * The Regents of the University of California. All rights reserved. 62591efccSDavid Schultz * 72591efccSDavid Schultz * This code is derived from software contributed to Berkeley by 82591efccSDavid Schultz * Chris Torek. 92591efccSDavid Schultz * 102591efccSDavid Schultz * Redistribution and use in source and binary forms, with or without 112591efccSDavid Schultz * modification, are permitted provided that the following conditions 122591efccSDavid Schultz * are met: 132591efccSDavid Schultz * 1. Redistributions of source code must retain the above copyright 142591efccSDavid Schultz * notice, this list of conditions and the following disclaimer. 152591efccSDavid Schultz * 2. Redistributions in binary form must reproduce the above copyright 162591efccSDavid Schultz * notice, this list of conditions and the following disclaimer in the 172591efccSDavid Schultz * documentation and/or other materials provided with the distribution. 18fbbd9655SWarner Losh * 3. Neither the name of the University nor the names of its contributors 192591efccSDavid Schultz * may be used to endorse or promote products derived from this software 202591efccSDavid Schultz * without specific prior written permission. 212591efccSDavid Schultz * 222591efccSDavid Schultz * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 232591efccSDavid Schultz * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 242591efccSDavid Schultz * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 252591efccSDavid Schultz * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 262591efccSDavid Schultz * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 272591efccSDavid Schultz * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 282591efccSDavid Schultz * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 292591efccSDavid Schultz * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 302591efccSDavid Schultz * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 312591efccSDavid Schultz * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 322591efccSDavid Schultz * SUCH DAMAGE. 332591efccSDavid Schultz */ 342591efccSDavid Schultz 352591efccSDavid Schultz /* 362591efccSDavid Schultz * Flags used during conversion. 372591efccSDavid Schultz */ 382591efccSDavid Schultz #define ALT 0x001 /* alternate form */ 392591efccSDavid Schultz #define LADJUST 0x004 /* left adjustment */ 402591efccSDavid Schultz #define LONGDBL 0x008 /* long double */ 412591efccSDavid Schultz #define LONGINT 0x010 /* long integer */ 422591efccSDavid Schultz #define LLONGINT 0x020 /* long long integer */ 432591efccSDavid Schultz #define SHORTINT 0x040 /* short integer */ 442591efccSDavid Schultz #define ZEROPAD 0x080 /* zero (as opposed to blank) pad */ 452591efccSDavid Schultz #define FPT 0x100 /* Floating point number */ 462591efccSDavid Schultz #define GROUPING 0x200 /* use grouping ("'" flag) */ 472591efccSDavid Schultz /* C99 additional size modifiers: */ 482591efccSDavid Schultz #define SIZET 0x400 /* size_t */ 492591efccSDavid Schultz #define PTRDIFFT 0x800 /* ptrdiff_t */ 502591efccSDavid Schultz #define INTMAXT 0x1000 /* intmax_t */ 512591efccSDavid Schultz #define CHARINT 0x2000 /* print char using int format */ 52*bce0bef3SDag-Erling Smørgrav #define FASTINT 0x4000 /* int_fastN_t */ 532591efccSDavid Schultz 542591efccSDavid Schultz /* 552591efccSDavid Schultz * Macros for converting digits to letters and vice versa 562591efccSDavid Schultz */ 572591efccSDavid Schultz #define to_digit(c) ((c) - '0') 582591efccSDavid Schultz #define is_digit(c) ((unsigned)to_digit(c) <= 9) 592591efccSDavid Schultz #define to_char(n) ((n) + '0') 602591efccSDavid Schultz 612591efccSDavid Schultz /* Size of the static argument table. */ 622591efccSDavid Schultz #define STATIC_ARG_TBL_SIZE 8 632591efccSDavid Schultz 642591efccSDavid Schultz union arg { 652591efccSDavid Schultz int intarg; 662591efccSDavid Schultz u_int uintarg; 672591efccSDavid Schultz long longarg; 682591efccSDavid Schultz u_long ulongarg; 692591efccSDavid Schultz long long longlongarg; 702591efccSDavid Schultz unsigned long long ulonglongarg; 712591efccSDavid Schultz ptrdiff_t ptrdiffarg; 722591efccSDavid Schultz size_t sizearg; 732591efccSDavid Schultz intmax_t intmaxarg; 742591efccSDavid Schultz uintmax_t uintmaxarg; 752591efccSDavid Schultz void *pvoidarg; 762591efccSDavid Schultz char *pchararg; 772591efccSDavid Schultz signed char *pschararg; 782591efccSDavid Schultz short *pshortarg; 792591efccSDavid Schultz int *pintarg; 802591efccSDavid Schultz long *plongarg; 812591efccSDavid Schultz long long *plonglongarg; 822591efccSDavid Schultz ptrdiff_t *pptrdiffarg; 8388f919d6SDavid Schultz ssize_t *pssizearg; 842591efccSDavid Schultz intmax_t *pintmaxarg; 852591efccSDavid Schultz #ifndef NO_FLOATING_POINT 862591efccSDavid Schultz double doublearg; 872591efccSDavid Schultz long double longdoublearg; 882591efccSDavid Schultz #endif 892591efccSDavid Schultz wint_t wintarg; 902591efccSDavid Schultz wchar_t *pwchararg; 912591efccSDavid Schultz }; 922591efccSDavid Schultz 932591efccSDavid Schultz /* Handle positional parameters. */ 94e62e5ff9SDavid Schultz int __find_arguments(const char *, va_list, union arg **); 95e62e5ff9SDavid Schultz int __find_warguments(const wchar_t *, va_list, union arg **); 96