ICU-267 move static data into makeconv for data based converters, fix initialization during makeconv

X-SVN-Rev: 1198
This commit is contained in:
Steven R. Loomis 2000-04-20 19:43:32 +00:00
parent 631d0d7614
commit fd4d62ffe1
3 changed files with 122 additions and 7 deletions

View file

@ -58,7 +58,7 @@ LDFLAGS = @LDFLAGS@ \
$(LD_RPATH)$(LD_RPATH_PRE)$(libdir)@ld_rpath_suf@$(LD_RPATH_PRE)$(top_builddir)/common@ld_rpath_suf@$(LD_RPATH_PRE)$(top_builddir)/tools/toolutil
LIBS = $(LIBICU-UC) @LIBS@ @LIB_M@ $(LIBICU-TOOLUTIL)
OBJECTS = makeconv.o
OBJECTS = makeconv.o ucnvstat.o
DEPS = $(OBJECTS:.o=.d)

View file

@ -31,6 +31,11 @@
#include "ucmpwrit.h"
/*
* from ucnvstat.c - static prototypes of data-based converters
*/
extern const UConverterStaticData * ucnv_converterStaticData[UCNV_NUMBER_OF_SUPPORTED_CONVERTER_TYPES];
/*
* Global - verbosity
*/
@ -91,6 +96,8 @@ static const char PLAIN_SEPARATORS[9] = { '\r', '\n', '\t', ' ', '<', '>' ,'"' ,
static const char CODEPOINT_SEPARATORS[8] = { '\r', '>', '\\', 'x', '\n', ' ', '\t', '\0' };
static const char UNICODE_CODEPOINT_SEPARATORS[6] = { '<', '>', 'U', ' ', '\t', '\0' };
/* Remove all characters followed by '#'
*/
char *
@ -159,7 +166,7 @@ char *
return line + i;
}
extern bool_t haveCopyright=TRUE;
bool_t haveCopyright=TRUE;
static const UDataInfo dataInfo={
sizeof(UDataInfo),
@ -472,6 +479,46 @@ void readHeaderFromFile(UConverterStaticData* myConverter,
return;
}
/* Now that we know the type, copy any 'default' values
from the table. */
{
const UConverterStaticData *prototype = ucnv_converterStaticData[myConverter->conversionType];
if ( prototype != NULL )
{
if ( myConverter->name[0] == 0 )
{
uprv_strcpy((char*)myConverter->name, prototype->name);
}
if ( myConverter->codepage == 0 )
{
myConverter->codepage = prototype->codepage;
}
if ( myConverter->platform == 0 )
{
myConverter->platform = prototype->platform;
}
if ( myConverter->minBytesPerChar == 0 )
{
myConverter->minBytesPerChar = prototype->minBytesPerChar;
}
if ( myConverter->maxBytesPerChar == 0 )
{
myConverter->maxBytesPerChar = prototype->maxBytesPerChar;
}
if ( myConverter->subCharLen == 0 )
{
myConverter->subCharLen = prototype->subCharLen;
uprv_memcpy(myConverter->subChar, prototype->subChar,
prototype->subCharLen);
}
}
}
}
/*get mb_cur_max amount*/
@ -527,12 +574,16 @@ UConverterTable *loadSBCSTableFromFile(FileStream* convFile, UConverterStaticDat
if (U_FAILURE(*err)) return;
replacementChar = myConverter->subChar[0];
myUConverterTable = (UConverterTable*)uprv_malloc(sizeof(UConverterSBCSTable));
if (myUConverterTable == NULL)
{
*err = U_MEMORY_ALLOCATION_ERROR;
return;
return NULL;
}
uprv_memset(myUConverterTable, 0, sizeof(UConverterSBCSTable));
/*create a compact array with replacement chars as default chars*/
ucmp8_init(&myUConverterTable->sbcs.fromUnicode, 0);
myFromUnicode = &myUConverterTable->sbcs.fromUnicode;
@ -540,7 +591,7 @@ UConverterTable *loadSBCSTableFromFile(FileStream* convFile, UConverterStaticDat
{
uprv_free(myUConverterTable);
*err = U_MEMORY_ALLOCATION_ERROR;
return;
return NULL;
}
myUConverterTable->sbcs.toUnicode = (UChar*)malloc(sizeof(UChar)*256);
@ -596,14 +647,16 @@ UConverterTable *loadMBCSTableFromFile(FileStream* convFile, UConverterStaticDat
if (myUConverterTable == NULL)
{
*err = U_MEMORY_ALLOCATION_ERROR;
return;
return NULL;
}
uprv_memset(myUConverterTable, 0, sizeof(UConverterMBCSTable));
myUConverterTable->mbcs.starters = (bool_t*)(uprv_malloc(sizeof(bool_t)*256));
if (myUConverterTable->mbcs.starters == NULL)
{
*err = U_MEMORY_ALLOCATION_ERROR;
return;
return NULL;
}
@ -676,9 +729,10 @@ UConverterTable *loadEBCDIC_STATEFULTableFromFile(FileStream* convFile, UConvert
if (myUConverterTable == NULL)
{
*err = U_MEMORY_ALLOCATION_ERROR;
return;
return NULL;
}
uprv_memset(myUConverterTable, 0, sizeof(UConverterMBCSTable));
myFromUnicode = &myUConverterTable->dbcs.fromUnicode;
ucmp16_init(myFromUnicode, (uint16_t)replacementChar);
@ -739,6 +793,8 @@ UConverterTable * loadDBCSTableFromFile(FileStream* convFile, UConverterStaticDa
return NULL;
}
uprv_memset(myUConverterTable, 0, sizeof(UConverterDBCSTable));
myFromUnicode = &(myUConverterTable->dbcs.fromUnicode);
ucmp16_init(myFromUnicode, (int16_t)replacementChar);
@ -834,6 +890,8 @@ UConverterSharedData* createConverterFromTableFile(const char* converterName, UE
T_FileStream_close(convFile);
return;
}
uprv_memset(mySharedData, 0, sizeof(UConverterSharedData));
mySharedData->structSize = sizeof(UConverterSharedData);

View file

@ -0,0 +1,57 @@
/*
******************************************************************************
*
* Copyright (C) 1998-2000, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************
*
*
* ucnvstat.c:
* UConverterStaticData prototypes for data based converters
*/
#include "unicode/utypes.h"
#include "unicode/ucnv.h"
#include "unicode/ucnv_bld.h"
static const UConverterStaticData _SBCSStaticData={
sizeof(UConverterStaticData),
"SBCS",
0, UCNV_IBM, UCNV_SBCS, 1, 1,
1, { 0, 0, 0, 0 },
{ 0,0,0 } /* reserved bytes */
};
static const UConverterStaticData _DBCSStaticData={
sizeof(UConverterStaticData),
"DBCS",
0, UCNV_IBM, UCNV_DBCS, 2, 2,
1, { 0, 0, 0, 0 }, /* subchar */
{ 0,0,0 } /* reserved bytes */
};
static const UConverterStaticData _MBCSStaticData={
sizeof(UConverterStaticData),
"MBCS",
0, UCNV_IBM, UCNV_MBCS, 1, 1,
1, { 0, 0, 0, 0 },
{ 0,0,0 } /* reserved bytes */
};
static const UConverterStaticData _EBCDICStatefulStaticData={
sizeof(UConverterStaticData),
"EBCDICStateful",
0, UCNV_IBM, UCNV_EBCDIC_STATEFUL, 1, 1,
1, { 0, 0, 0, 0 },
{ 0,0,0 } /* reserved bytes */
};
/* NULLs for algorithmic types, their tables live in ucnv_bld.c */
const UConverterStaticData *ucnv_converterStaticData[UCNV_NUMBER_OF_SUPPORTED_CONVERTER_TYPES]={
&_SBCSStaticData, &_DBCSStaticData, &_MBCSStaticData, NULL/*Lat1*/,
NULL/*UTF8*/, NULL/*UTF16be*/, NULL/*UTF16LE*/, &_EBCDICStatefulStaticData,
NULL/*ISO2022*/,
/* LMBCS */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
};