1 /*
2 ******************************************************************************
3 *
4 * Copyright (C) 1998-2014, 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 && !UCONFIG_NO_CONVERSION
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
u_fscanf(UFILE * f,const char * patternSpecification,...)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
u_fscanf_u(UFILE * f,const UChar * patternSpecification,...)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 */
u_vfscanf(UFILE * f,const char * patternSpecification,va_list ap)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 */
u_vfscanf_u(UFILE * f,const UChar * patternSpecification,va_list ap)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
107