|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * The contents of this file constitute Original Code as defined in and ! 7: * are subject to the Apple Public Source License Version 1.1 (the ! 8: * "License"). You may not use this file except in compliance with the ! 9: * License. Please obtain a copy of the License at ! 10: * http://www.apple.com/publicsource and read it before using this file. ! 11: * ! 12: * This Original Code and all software distributed under the License are ! 13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 17: * License for the specific language governing rights and limitations ! 18: * under the License. ! 19: * ! 20: * @APPLE_LICENSE_HEADER_END@ ! 21: */ ! 22: /* ! 23: * @OSF_FREE_COPYRIGHT@ ! 24: */ ! 25: /* ! 26: * HISTORY ! 27: * ! 28: * Revision 1.1.1.1 1998/09/22 21:05:32 wsanchez ! 29: * Import of Mac OS X kernel (~semeria) ! 30: * ! 31: * Revision 1.1.1.1 1998/03/07 02:25:56 wsanchez ! 32: * Import of OSF Mach kernel (~mburg) ! 33: * ! 34: * Revision 1.1.8.2 1997/02/12 12:52:33 stephen ! 35: * New file, reimplemented to be sure of copyright status ! 36: * Initially only supports character matching and '%d' ! 37: * [1997/02/12 12:43:09 stephen] ! 38: * ! 39: * $EndLog$ ! 40: */ ! 41: ! 42: #include <stdarg.h> ! 43: #include <kern/misc_protos.h> ! 44: ! 45: #define isdigit(c) ((unsigned) ((c) - '0') < 10U) ! 46: ! 47: /* ! 48: * Scan items from a string in accordance with a format. This is much ! 49: * simpler than the C standard function: it only recognises %d without a ! 50: * field width, and does not treat space in the format string or the ! 51: * input any differently from other characters. The return value is the ! 52: * number of characters from the input string that were successfully ! 53: * scanned, not the number of format items matched as in standard sscanf. ! 54: * [email protected], 12 Feb 97 ! 55: */ ! 56: int ! 57: sscanf(const char *str, const char *format, ...) ! 58: { ! 59: const char *start = str; ! 60: va_list args; ! 61: ! 62: va_start(args, format); ! 63: for ( ; *format != '\0'; format++) { ! 64: if (*format == '%' && format[1] == 'd') { ! 65: int positive; ! 66: int value; ! 67: int *valp; ! 68: ! 69: if (*str == '-') { ! 70: positive = 0; ! 71: str++; ! 72: } else ! 73: positive = 1; ! 74: if (!isdigit(*str)) ! 75: break; ! 76: value = 0; ! 77: do { ! 78: value = (value * 10) - (*str - '0'); ! 79: str++; ! 80: } while (isdigit(*str)); ! 81: if (positive) ! 82: value = -value; ! 83: valp = va_arg(args, int *); ! 84: *valp = value; ! 85: format++; ! 86: } else if (*format == *str) { ! 87: str++; ! 88: } else ! 89: break; ! 90: } ! 91: va_end(args); ! 92: return str - start; ! 93: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.