|
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 |
|
34 U_CAPI int32_t U_EXPORT2 |
|
35 u_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 |
|
49 U_CAPI int32_t U_EXPORT2 |
|
50 u_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 |
|
64 U_CAPI int32_t U_EXPORT2 /* U_CAPI ... U_EXPORT2 added by Peter Kirk 17 Nov 2001 */ |
|
65 u_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 |
|
97 U_CAPI int32_t U_EXPORT2 /* U_CAPI ... U_EXPORT2 added by Peter Kirk 17 Nov 2001 */ |
|
98 u_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 |