1/* 2****************************************************************************** 3* 4* Copyright (C) 1998-2004, International Business Machines 5* Corporation and others. All Rights Reserved. 6* 7****************************************************************************** 8* 9* File uscanf.c 10* 11* Modification History: 12* 13* Date Name Description 14* 12/02/98 stephen Creation. 15* 03/13/99 stephen Modified for new C API. 16****************************************************************************** 17*/ 18 19#include "unicode/utypes.h" 20 21#if !UCONFIG_NO_FORMATTING 22 23#include "unicode/putil.h" 24#include "unicode/ustdio.h" 25#include "unicode/ustring.h" 26#include "uscanf.h" 27#include "ufile.h" 28#include "ufmt_cmn.h" 29 30#include "cmemory.h" 31#include "cstring.h" 32 33 34U_CAPI int32_t U_EXPORT2 35u_fscanf(UFILE *f, 36 const char *patternSpecification, 37 ... ) 38{ 39 va_list ap; 40 int32_t converted; 41 42 va_start(ap, patternSpecification); 43 converted = u_vfscanf(f, patternSpecification, ap); 44 va_end(ap); 45 46 return converted; 47} 48 49U_CAPI int32_t U_EXPORT2 50u_fscanf_u(UFILE *f, 51 const UChar *patternSpecification, 52 ... ) 53{ 54 va_list ap; 55 int32_t converted; 56 57 va_start(ap, patternSpecification); 58 converted = u_vfscanf_u(f, patternSpecification, ap); 59 va_end(ap); 60 61 return converted; 62} 63 64U_CAPI int32_t U_EXPORT2 /* U_CAPI ... U_EXPORT2 added by Peter Kirk 17 Nov 2001 */ 65u_vfscanf(UFILE *f, 66 const char *patternSpecification, 67 va_list ap) 68{ 69 int32_t converted; 70 UChar *pattern; 71 UChar patBuffer[UFMT_DEFAULT_BUFFER_SIZE]; 72 int32_t size = (int32_t)uprv_strlen(patternSpecification) + 1; 73 74 /* convert from the default codepage to Unicode */ 75 if (size >= MAX_UCHAR_BUFFER_SIZE(patBuffer)) { 76 pattern = (UChar *)uprv_malloc(size * sizeof(UChar)); 77 if(pattern == 0) { 78 return 0; 79 } 80 } 81 else { 82 pattern = patBuffer; 83 } 84 u_charsToUChars(patternSpecification, pattern, size); 85 86 /* do the work */ 87 converted = u_vfscanf_u(f, pattern, ap); 88 89 /* clean up */ 90 if (pattern != patBuffer) { 91 uprv_free(pattern); 92 } 93 94 return converted; 95} 96 97U_CAPI int32_t U_EXPORT2 /* U_CAPI ... U_EXPORT2 added by Peter Kirk 17 Nov 2001 */ 98u_vfscanf_u(UFILE *f, 99 const UChar *patternSpecification, 100 va_list ap) 101{ 102 return u_scanf_parse(f, patternSpecification, ap); 103} 104 105#endif /* #if !UCONFIG_NO_FORMATTING */ 106 107