w32tex
About: TeX Live provides a comprehensive TeX system including all the major TeX-related programs, macro packages, and fonts that are free software. Windows sources.
  Fossies Dox: w32tex-src.tar.xz  ("unofficial" and yet experimental doxygen-generated source code documentation)  

pkg_gencmn.cpp
Go to the documentation of this file.
1 // © 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /******************************************************************************
4  * Copyright (C) 2008-2012, International Business Machines
5  * Corporation and others. All Rights Reserved.
6  *******************************************************************************
7  */
8 #include "unicode/utypes.h"
9 
10 #include <stdio.h>
11 #include <stdlib.h>
12 #include "unicode/utypes.h"
13 #include "unicode/putil.h"
14 #include "cmemory.h"
15 #include "cstring.h"
16 #include "filestrm.h"
17 #include "toolutil.h"
18 #include "unicode/uclean.h"
19 #include "unewdata.h"
20 #include "putilimp.h"
21 #include "pkg_gencmn.h"
22 
23 #define STRING_STORE_SIZE 200000
24 
25 #define COMMON_DATA_NAME U_ICUDATA_NAME
26 #define DATA_TYPE "dat"
27 
28 /* ICU package data file format (.dat files) ------------------------------- ***
29 
30 Description of the data format after the usual ICU data file header
31 (UDataInfo etc.).
32 
33 Format version 1
34 
35 A .dat package file contains a simple Table of Contents of item names,
36 followed by the items themselves:
37 
38 1. ToC table
39 
40 uint32_t count; - number of items
41 UDataOffsetTOCEntry entry[count]; - pair of uint32_t values per item:
42  uint32_t nameOffset; - offset of the item name
43  uint32_t dataOffset; - offset of the item data
44 both are byte offsets from the beginning of the data
45 
46 2. item name strings
47 
48 All item names are stored as char * strings in one block between the ToC table
49 and the data items.
50 
51 3. data items
52 
53 The data items are stored following the item names block.
54 Each data item is 16-aligned.
55 The data items are stored in the sorted order of their names.
56 
57 Therefore, the top of the name strings block is the offset of the first item,
58 the length of the last item is the difference between its offset and
59 the .dat file length, and the length of all previous items is the difference
60 between its offset and the next one.
61 
62 ----------------------------------------------------------------------------- */
63 
64 /* UDataInfo cf. udata.h */
65 static const UDataInfo dataInfo={
66  sizeof(UDataInfo),
67  0,
68 
71  sizeof(UChar),
72  0,
73 
74  {0x43, 0x6d, 0x6e, 0x44}, /* dataFormat="CmnD" */
75  {1, 0, 0, 0}, /* formatVersion */
76  {3, 0, 0, 0} /* dataVersion */
77 };
78 
80 
83 
84 typedef struct {
85  char *pathname, *basename;
86  uint32_t basenameLength, basenameOffset, fileSize, fileOffset;
87 } File;
88 
89 #define CHUNK_FILE_COUNT 256
90 static File *files = NULL;
92 static uint32_t fileMax = 0;
93 
94 
95 static char *symPrefix = NULL;
96 
97 #define LINE_BUFFER_SIZE 512
98 /* prototypes --------------------------------------------------------------- */
99 
100 static void
101 addFile(const char *filename, const char *name, const char *source, UBool sourceTOC, UBool verbose);
102 
103 static char *
105 
107 static int
108 compareFiles(const void *file1, const void *file2);
110 
111 static char *
112 pathToFullPath(const char *path, const char *source);
113 
114 /* map non-tree separator (such as '\') to tree separator ('/') inplace. */
115 static void
116 fixDirToTreePath(char *s);
117 /* -------------------------------------------------------------------------- */
118 
119 U_CAPI void U_EXPORT2
120 createCommonDataFile(const char *destDir, const char *name, const char *entrypointName, const char *type, const char *source, const char *copyRight,
121  const char *dataFile, uint32_t max_size, UBool sourceTOC, UBool verbose, char *gencmnFileName) {
122  static char buffer[4096];
123  char *line;
124  char *linePtr;
125  char *s = NULL;
127  uint32_t i, fileOffset, basenameOffset, length, nread;
128  FileStream *in, *file;
129 
130  line = (char *)uprv_malloc(sizeof(char) * LINE_BUFFER_SIZE);
131  if (line == NULL) {
132  fprintf(stderr, "gencmn: unable to allocate memory for line buffer of size %d\n", LINE_BUFFER_SIZE);
134  }
135 
136  linePtr = line;
137 
138  maxSize = max_size;
139 
140  if (destDir == NULL) {
141  destDir = u_getDataDirectory();
142  }
143  if (name == NULL) {
145  }
146  if (type == NULL) {
147  type = DATA_TYPE;
148  }
149  if (source == NULL) {
150  source = ".";
151  }
152 
153  if (dataFile == NULL) {
155  } else {
156  in = T_FileStream_open(dataFile, "r");
157  if(in == NULL) {
158  fprintf(stderr, "gencmn: unable to open input file %s\n", dataFile);
160  }
161  }
162 
163  if (verbose) {
164  if(sourceTOC) {
165  printf("generating %s_%s.c (table of contents source file)\n", name, type);
166  } else {
167  printf("generating %s.%s (common data file with table of contents)\n", name, type);
168  }
169  }
170 
171  /* read the list of files and get their lengths */
172  while((s != NULL && *s != 0) || (s=T_FileStream_readLine(in, (line=linePtr),
173  LINE_BUFFER_SIZE))!=NULL) {
174  /* remove trailing newline characters and parse space separated items */
175  if (s != NULL && *s != 0) {
176  line=s;
177  } else {
178  s=line;
179  }
180  while(*s!=0) {
181  if(*s==' ') {
182  *s=0;
183  ++s;
184  break;
185  } else if(*s=='\r' || *s=='\n') {
186  *s=0;
187  break;
188  }
189  ++s;
190  }
191 
192  /* check for comment */
193 
194  if (*line == '#') {
195  continue;
196  }
197 
198  /* add the file */
199 #if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR)
200  {
201  char *t;
202  while((t = uprv_strchr(line,U_FILE_ALT_SEP_CHAR))) {
203  *t = U_FILE_SEP_CHAR;
204  }
205  }
206 #endif
207  addFile(getLongPathname(line), name, source, sourceTOC, verbose);
208  }
209 
210  uprv_free(linePtr);
211 
212  if(in!=T_FileStream_stdin()) {
214  }
215 
216  if(fileCount==0) {
217  fprintf(stderr, "gencmn: no files listed in %s\n", dataFile == NULL ? "<stdin>" : dataFile);
218  return;
219  }
220 
221  /* sort the files by basename */
222  qsort(files, fileCount, sizeof(File), compareFiles);
223 
224  if(!sourceTOC) {
226 
227  /* determine the offsets of all basenames and files in this common one */
228  basenameOffset=4+8*fileCount;
229  fileOffset=(basenameOffset+(basenameTotal+15))&~0xf;
230  for(i=0; i<fileCount; ++i) {
231  files[i].fileOffset=fileOffset;
232  fileOffset+=(files[i].fileSize+15)&~0xf;
233  files[i].basenameOffset=basenameOffset;
234  basenameOffset+=files[i].basenameLength;
235  }
236 
237  /* create the output file */
238  out=udata_create(destDir, type, name,
239  &dataInfo,
241  &errorCode);
242  if(U_FAILURE(errorCode)) {
243  fprintf(stderr, "gencmn: udata_create(-d %s -n %s -t %s) failed - %s\n",
244  destDir, name, type,
246  exit(errorCode);
247  }
248 
249  /* write the table of contents */
251  for(i=0; i<fileCount; ++i) {
252  udata_write32(out, files[i].basenameOffset);
253  udata_write32(out, files[i].fileOffset);
254  }
255 
256  /* write the basenames */
257  for(i=0; i<fileCount; ++i) {
258  udata_writeString(out, files[i].basename, files[i].basenameLength);
259  }
261 
262  /* copy the files */
263  for(i=0; i<fileCount; ++i) {
264  /* pad to 16-align the next file */
265  length&=0xf;
266  if(length!=0) {
268  }
269 
270  if (verbose) {
271  printf("adding %s (%ld byte%s)\n", files[i].pathname, (long)files[i].fileSize, files[i].fileSize == 1 ? "" : "s");
272  }
273 
274  /* copy the next file */
275  file=T_FileStream_open(files[i].pathname, "rb");
276  if(file==NULL) {
277  fprintf(stderr, "gencmn: unable to open listed file %s\n", files[i].pathname);
279  }
280  for(nread = 0;;) {
282  if(length <= 0) {
283  break;
284  }
285  nread += length;
287  }
290 
291  if (nread != files[i].fileSize) {
292  fprintf(stderr, "gencmn: unable to read %s properly (got %ld/%ld byte%s)\n", files[i].pathname, (long)nread, (long)files[i].fileSize, files[i].fileSize == 1 ? "" : "s");
294  }
295  }
296 
297  /* pad to 16-align the last file (cleaner, avoids growing .dat files in icuswap) */
298  length&=0xf;
299  if(length!=0) {
301  }
302 
303  /* finish */
305  if(U_FAILURE(errorCode)) {
306  fprintf(stderr, "gencmn: udata_finish() failed - %s\n", u_errorName(errorCode));
307  exit(errorCode);
308  }
309  } else {
310  /* write a .c source file with the table of contents */
311  char *filename;
312  FileStream *out;
313 
314  /* create the output filename */
315  filename=s=buffer;
316  uprv_strcpy(filename, destDir);
318  if(s>filename && *(s-1)!=U_FILE_SEP_CHAR) {
319  *s++=U_FILE_SEP_CHAR;
320  }
321  uprv_strcpy(s, name);
322  if(*(type)!=0) {
323  s+=uprv_strlen(s);
324  *s++='_';
325  uprv_strcpy(s, type);
326  }
327  s+=uprv_strlen(s);
328  uprv_strcpy(s, ".c");
329 
330  /* open the output file */
332  if (gencmnFileName != NULL) {
333  uprv_strcpy(gencmnFileName, filename);
334  }
335  if(out==NULL) {
336  fprintf(stderr, "gencmn: unable to open .c output file %s\n", filename);
338  }
339 
340  /* write the source file */
341  sprintf(buffer,
342  "/*\n"
343  " * ICU common data table of contents for %s.%s\n"
344  " * Automatically generated by icu/source/tools/gencmn/gencmn .\n"
345  " */\n\n"
346  "#include \"unicode/utypes.h\"\n"
347  "#include \"unicode/udata.h\"\n"
348  "\n"
349  "/* external symbol declarations for data (%d files) */\n",
350  name, type, fileCount);
352 
353  sprintf(buffer, "extern const char\n %s%s[]", symPrefix?symPrefix:"", files[0].pathname);
355  for(i=1; i<fileCount; ++i) {
356  sprintf(buffer, ",\n %s%s[]", symPrefix?symPrefix:"", files[i].pathname);
358  }
359  T_FileStream_writeLine(out, ";\n\n");
360 
361  sprintf(
362  buffer,
363  "U_EXPORT struct {\n"
364  " uint16_t headerSize;\n"
365  " uint8_t magic1, magic2;\n"
366  " UDataInfo info;\n"
367  " char padding[%lu];\n"
368  " uint32_t count, reserved;\n"
369  " struct {\n"
370  " const char *name;\n"
371  " const void *data;\n"
372  " } toc[%lu];\n"
373  "} U_EXPORT2 %s_dat = {\n"
374  " 32, 0xda, 0x27, {\n"
375  " %lu, 0,\n"
376  " %u, %u, %u, 0,\n"
377  " {0x54, 0x6f, 0x43, 0x50},\n"
378  " {1, 0, 0, 0},\n"
379  " {0, 0, 0, 0}\n"
380  " },\n"
381  " \"\", %lu, 0, {\n",
382  static_cast<unsigned long>(32-4-sizeof(UDataInfo)),
383  static_cast<unsigned long>(fileCount),
384  entrypointName,
385  static_cast<unsigned long>(sizeof(UDataInfo)),
389  static_cast<unsigned long>(fileCount)
390  );
392 
393  sprintf(buffer, " { \"%s\", %s%s }", files[0].basename, symPrefix?symPrefix:"", files[0].pathname);
395  for(i=1; i<fileCount; ++i) {
396  sprintf(buffer, ",\n { \"%s\", %s%s }", files[i].basename, symPrefix?symPrefix:"", files[i].pathname);
398  }
399 
400  T_FileStream_writeLine(out, "\n }\n};\n");
402 
404  }
405 }
406 
407 static void
408 addFile(const char *filename, const char *name, const char *source, UBool sourceTOC, UBool verbose) {
409  char *s;
411  char *fullPath = NULL;
412 
413  if(fileCount==fileMax) {
415  files = (File *)uprv_realloc(files, fileMax*sizeof(files[0])); /* note: never freed. */
416  if(files==NULL) {
417  fprintf(stderr, "pkgdata/gencmn: Could not allocate %u bytes for %d files\n", (unsigned int)(fileMax*sizeof(files[0])), fileCount);
419  }
420  }
421 
422  if(!sourceTOC) {
423  FileStream *file;
424 
426  fprintf(stderr, "gencmn: Error: absolute path encountered. Old style paths are not supported. Use relative paths such as 'fur.res' or 'translit%cfur.res'.\n\tBad path: '%s'\n", U_FILE_SEP_CHAR, filename);
428  }
429  fullPath = pathToFullPath(filename, source);
430  /* store the pathname */
433  uprv_strcpy(s, name);
436 
437  /* get the basename */
441 
442  files[fileCount].pathname=fullPath;
443 
445 
446  /* try to open the file */
447  file=T_FileStream_open(fullPath, "rb");
448  if(file==NULL) {
449  fprintf(stderr, "gencmn: unable to open listed file %s\n", fullPath);
451  }
452 
453  /* get the file length */
455  if(T_FileStream_error(file) || length<=20) {
456  fprintf(stderr, "gencmn: unable to get length of listed file %s\n", fullPath);
458  }
459 
461 
462  /* do not add files that are longer than maxSize */
463  if(maxSize && length>maxSize) {
464  if (verbose) {
465  printf("%s ignored (size %ld > %ld)\n", fullPath, (long)length, (long)maxSize);
466  }
467  return;
468  }
470  } else {
471  char *t;
472  /* get and store the basename */
473  /* need to include the package name */
476  uprv_strcpy(s, name);
481  /* turn the basename into an entry point name and store in the pathname field */
483  while(--length>0) {
484  if(*s=='.' || *s=='-' || *s=='/') {
485  *t='_';
486  } else {
487  *t=*s;
488  }
489  ++s;
490  ++t;
491  }
492  *t=0;
493  }
494  ++fileCount;
495 }
496 
497 static char *
500  char *p;
501 
502  if(top>STRING_STORE_SIZE) {
503  fprintf(stderr, "gencmn: out of memory\n");
505  }
507  stringTop=top;
508  return p;
509 }
510 
511 static char *
512 pathToFullPath(const char *path, const char *source) {
513  int32_t length;
515  char *fullPath;
516  int32_t n;
517 
518  length = (uint32_t)(uprv_strlen(path) + 1);
520  fullPath = (char *)uprv_malloc(newLength);
521  if(source != NULL) {
522  uprv_strcpy(fullPath, source);
523  uprv_strcat(fullPath, U_FILE_SEP_STRING);
524  } else {
525  fullPath[0] = 0;
526  }
527  n = (int32_t)uprv_strlen(fullPath);
528  fullPath[n] = 0; /* Suppress compiler warning for unused variable n */
529  /* when conditional code below is not compiled. */
530  uprv_strcat(fullPath, path);
531 
532 #if (U_FILE_ALT_SEP_CHAR != U_TREE_ENTRY_SEP_CHAR)
533 #if (U_FILE_ALT_SEP_CHAR != U_FILE_SEP_CHAR)
534  /* replace tree separator (such as '/') with file sep char (such as ':' or '\\') */
535  for(;fullPath[n];n++) {
536  if(fullPath[n] == U_FILE_ALT_SEP_CHAR) {
537  fullPath[n] = U_FILE_SEP_CHAR;
538  }
539  }
540 #endif
541 #endif
542 #if (U_FILE_SEP_CHAR != U_TREE_ENTRY_SEP_CHAR)
543  /* replace tree separator (such as '/') with file sep char (such as ':' or '\\') */
544  for(;fullPath[n];n++) {
545  if(fullPath[n] == U_TREE_ENTRY_SEP_CHAR) {
546  fullPath[n] = U_FILE_SEP_CHAR;
547  }
548  }
549 #endif
550  return fullPath;
551 }
552 
554 static int
555 compareFiles(const void *file1, const void *file2) {
556  /* sort by basename */
557  return uprv_strcmp(((File *)file1)->basename, ((File *)file2)->basename);
558 }
560 
561 static void
563 {
564  (void)s;
565 #if (U_FILE_SEP_CHAR != U_TREE_ENTRY_SEP_CHAR) || ((U_FILE_ALT_SEP_CHAR != U_FILE_SEP_CHAR) && (U_FILE_ALT_SEP_CHAR != U_TREE_ENTRY_SEP_CHAR))
566  char *t;
567 #endif
568 #if (U_FILE_SEP_CHAR != U_TREE_ENTRY_SEP_CHAR)
569  for(t=s;t=uprv_strchr(t,U_FILE_SEP_CHAR);) {
571  }
572 #endif
573 #if (U_FILE_ALT_SEP_CHAR != U_FILE_SEP_CHAR) && (U_FILE_ALT_SEP_CHAR != U_TREE_ENTRY_SEP_CHAR)
576  }
577 #endif
578 }
#define type(a)
Definition: aptex-macros.h:171
#define name
#define n
Definition: t4ht.c:1290
#define uprv_strcmp(s1, s2)
Definition: cstring.h:38
#define uprv_strchr(s, c)
Definition: cstring.h:40
#define uprv_strcpy(dst, src)
Definition: cstring.h:36
#define uprv_strcat(dst, src)
Definition: cstring.h:39
#define uprv_strlen(str)
Definition: cstring.h:37
int printf()
int T_FileStream_error(FileStream *fileStream)
Definition: filestrm.cpp:191
int32_t T_FileStream_writeLine(FileStream *fileStream, const char *buffer)
Definition: filestrm.cpp:159
void T_FileStream_close(FileStream *fileStream)
Definition: filestrm.cpp:75
char * T_FileStream_readLine(FileStream *fileStream, char *buffer, int32_t length)
Definition: filestrm.cpp:153
int32_t T_FileStream_size(FileStream *fileStream)
Definition: filestrm.cpp:165
int32_t T_FileStream_read(FileStream *fileStream, void *addr, int32_t len)
Definition: filestrm.cpp:105
FileStream * T_FileStream_stdin(void)
Definition: filestrm.cpp:206
FileStream * T_FileStream_open(const char *filename, const char *mode)
Definition: filestrm.cpp:33
static void
Definition: fpif.c:118
#define s
Definition: afcover.h:80
#define t
Definition: afcover.h:96
FILE * out
Definition: hbf2gf.c:286
static int32_t fileSize(FILE *f)
Definition: icuswap.cpp:61
unsigned char UChar
Definition: bzip2.c:163
#define NULL
Definition: ftobjs.h:61
small capitals from c petite p
Definition: afcover.h:72
small capitals from c petite p scientific i
Definition: afcover.h:80
void exit()
int int double double double char double char * top
Definition: gdfx.h:19
unsigned int uint32_t
Definition: stdint.h:80
signed int int32_t
Definition: stdint.h:77
#define basename
Definition: dvi.c:33
#define fprintf
Definition: mendex.h:64
#define length(c)
Definition: ctangleboot.c:65
#define sprintf
Definition: snprintf.c:44
static void newLength(char *s, int d)
Definition: lengths.c:62
#define U_IS_BIG_ENDIAN
Definition: platform.h:403
#define U_EXPORT2
Definition: platform.h:844
#define U_CHARSET_FAMILY
Definition: platform.h:632
#define qsort
Definition: includes.h:72
char * filename[256]
Definition: pbmtopk.c:46
void createCommonDataFile(const char *destDir, const char *name, const char *entrypointName, const char *type, const char *source, const char *copyRight, const char *dataFile, uint32_t max_size, UBool sourceTOC, UBool verbose, char *gencmnFileName)
Definition: pkg_gencmn.cpp:120
static uint32_t stringTop
Definition: pkg_gencmn.cpp:82
static const UDataInfo dataInfo
Definition: pkg_gencmn.cpp:65
#define COMMON_DATA_NAME
Definition: pkg_gencmn.cpp:25
static File * files
Definition: pkg_gencmn.cpp:90
static uint32_t maxSize
Definition: pkg_gencmn.cpp:79
static void addFile(const char *filename, const char *name, const char *source, UBool sourceTOC, UBool verbose)
Definition: pkg_gencmn.cpp:408
static char * pathToFullPath(const char *path, const char *source)
Definition: pkg_gencmn.cpp:512
#define CHUNK_FILE_COUNT
Definition: pkg_gencmn.cpp:89
static int compareFiles(const void *file1, const void *file2)
Definition: pkg_gencmn.cpp:555
static uint32_t fileMax
Definition: pkg_gencmn.cpp:92
static char * symPrefix
Definition: pkg_gencmn.cpp:95
#define STRING_STORE_SIZE
Definition: pkg_gencmn.cpp:23
static void fixDirToTreePath(char *s)
Definition: pkg_gencmn.cpp:562
static char stringStore[200000]
Definition: pkg_gencmn.cpp:81
static char * allocString(uint32_t length)
Definition: pkg_gencmn.cpp:498
static uint32_t fileCount
Definition: pkg_gencmn.cpp:91
#define LINE_BUFFER_SIZE
Definition: pkg_gencmn.cpp:97
static uint32_t basenameTotal
Definition: pkg_gencmn.cpp:82
#define DATA_TYPE
Definition: pkg_gencmn.cpp:26
char line[1024]
Definition: process_score.c:29
C API: Platform Utilities.
#define U_FILE_SEP_CHAR
Definition: putil.h:130
#define U_FILE_ALT_SEP_CHAR
Definition: putil.h:131
#define U_FILE_SEP_STRING
Definition: putil.h:133
static FILE * in
Definition: squeeze.c:36
#define uint32_t
Definition: stdint.in.h:168
#define int32_t
Definition: stdint.in.h:167
uint32_t fileSize
Definition: pkg_gencmn.cpp:86
uint32_t fileOffset
Definition: pkg_gencmn.cpp:86
char * basename
Definition: pkg_gencmn.cpp:85
uint32_t basenameOffset
Definition: pkg_gencmn.cpp:86
char * pathname
Definition: pkg_gencmn.cpp:85
uint32_t basenameLength
Definition: pkg_gencmn.cpp:86
Definition: utils.c:300
Definition: filedef.h:30
Definition: bdf.c:133
Definition: tpic.c:45
Definition: sh.h:1345
Definition: dvips.h:235
char * file
Definition: t4ht.c:931
#define verbose
Definition: jpeg.c:35
const char * getLongPathname(const char *pathname)
Definition: toolutil.cpp:107
C API: Initialize and clean up ICU.
#define U_TREE_ENTRY_SEP_CHAR
Definition: udata.h:62
#define U_TREE_ENTRY_SEP_STRING
Definition: udata.h:68
#define U_CDECL_END
Definition: umachine.h:86
int8_t UBool
Definition: umachine.h:269
#define U_CAPI
Definition: umachine.h:110
#define U_CDECL_BEGIN
Definition: umachine.h:85
#define U_SIZEOF_UCHAR
Definition: umachine.h:358
void udata_writeString(UNewDataMemory *pData, const char *s, int32_t length)
Definition: unewdata.cpp:255
uint32_t udata_finish(UNewDataMemory *pData, UErrorCode *pErrorCode)
Definition: unewdata.cpp:154
void udata_write32(UNewDataMemory *pData, uint32_t wyde)
Definition: unewdata.cpp:220
void udata_writeBlock(UNewDataMemory *pData, const void *s, int32_t length)
Definition: unewdata.cpp:227
UNewDataMemory * udata_create(const char *dir, const char *type, const char *name, const UDataInfo *pInfo, const char *comment, UErrorCode *pErrorCode)
Definition: unewdata.cpp:36
void udata_writePadding(UNewDataMemory *pData, int32_t length)
Definition: unewdata.cpp:236
#define u_errorName
Definition: urename.h:226
#define uprv_realloc
Definition: urename.h:1447
#define u_getDataDirectory
Definition: urename.h:265
#define uprv_pathIsAbsolute
Definition: urename.h:1444
#define uprv_malloc
Definition: urename.h:1435
#define uprv_free
Definition: urename.h:1414
Basic definitions for ICU, for both C and C++ APIs.
UErrorCode
Definition: utypes.h:431
@ U_MEMORY_ALLOCATION_ERROR
Definition: utypes.h:473
@ U_ILLEGAL_ARGUMENT_ERROR
Definition: utypes.h:467
@ U_FILE_ACCESS_ERROR
Definition: utypes.h:470
@ U_ZERO_ERROR
Definition: utypes.h:465
#define U_FAILURE(x)
Definition: utypes.h:735
#define U_COPYRIGHT_STRING
Definition: uvernum.h:56
static const char copyRight[]
Definition: wrtjava.cpp:41
#define buffer
Definition: xmlparse.c:611
#define errorCode
Definition: xmlparse.c:601