| Index: source/tools/toolutil/package.cpp
|
| diff --git a/source/tools/toolutil/package.cpp b/source/tools/toolutil/package.cpp
|
| index 658053912539a2e0af3360ca6cf8e1cfad4ce8e7..736906811d26660d5291fd2d095eb17f29fd1ace 100644
|
| --- a/source/tools/toolutil/package.cpp
|
| +++ b/source/tools/toolutil/package.cpp
|
| @@ -1,7 +1,7 @@
|
| /*
|
| *******************************************************************************
|
| *
|
| -* Copyright (C) 1999-2014, International Business Machines
|
| +* Copyright (C) 1999-2015, International Business Machines
|
| * Corporation and others. All Rights Reserved.
|
| *
|
| *******************************************************************************
|
| @@ -304,7 +304,6 @@ static uint8_t *
|
| readFile(const char *path, const char *name, int32_t &length, char &type) {
|
| char filename[1024];
|
| FILE *file;
|
| - uint8_t *data;
|
| UErrorCode errorCode;
|
| int32_t fileLength, typeEnum;
|
|
|
| @@ -327,34 +326,32 @@ readFile(const char *path, const char *name, int32_t &length, char &type) {
|
|
|
| /* allocate the buffer, pad to multiple of 16 */
|
| length=(fileLength+0xf)&~0xf;
|
| - data=(uint8_t *)uprv_malloc(length);
|
| - if(data==NULL) {
|
| + icu::LocalMemory<uint8_t> data((uint8_t *)uprv_malloc(length));
|
| + if(data.isNull()) {
|
| fclose(file);
|
| fprintf(stderr, "icupkg: malloc error allocating %d bytes.\n", (int)length);
|
| exit(U_MEMORY_ALLOCATION_ERROR);
|
| }
|
|
|
| /* read the file */
|
| - if(fileLength!=(int32_t)fread(data, 1, fileLength, file)) {
|
| + if(fileLength!=(int32_t)fread(data.getAlias(), 1, fileLength, file)) {
|
| fprintf(stderr, "icupkg: error reading \"%s\"\n", filename);
|
| fclose(file);
|
| - free(data);
|
| exit(U_FILE_ACCESS_ERROR);
|
| }
|
|
|
| /* pad the file to a multiple of 16 using the usual padding byte */
|
| if(fileLength<length) {
|
| - memset(data+fileLength, 0xaa, length-fileLength);
|
| + memset(data.getAlias()+fileLength, 0xaa, length-fileLength);
|
| }
|
|
|
| fclose(file);
|
|
|
| // minimum check for ICU-format data
|
| errorCode=U_ZERO_ERROR;
|
| - typeEnum=getTypeEnumForInputData(data, length, &errorCode);
|
| + typeEnum=getTypeEnumForInputData(data.getAlias(), length, &errorCode);
|
| if(typeEnum<0 || U_FAILURE(errorCode)) {
|
| fprintf(stderr, "icupkg: not an ICU data file: \"%s\"\n", filename);
|
| - free(data);
|
| #if !UCONFIG_NO_LEGACY_CONVERSION
|
| exit(U_INVALID_FORMAT_ERROR);
|
| #else
|
| @@ -364,7 +361,7 @@ readFile(const char *path, const char *name, int32_t &length, char &type) {
|
| }
|
| type=makeTypeLetter(typeEnum);
|
|
|
| - return data;
|
| + return data.orphan();
|
| }
|
|
|
| // .dat package file representation ---------------------------------------- ***
|
| @@ -421,11 +418,11 @@ Package::Package()
|
| Package::~Package() {
|
| int32_t idx;
|
|
|
| - free(inData);
|
| + uprv_free(inData);
|
|
|
| for(idx=0; idx<itemCount; ++idx) {
|
| if(items[idx].isDataOwned) {
|
| - free(items[idx].data);
|
| + uprv_free(items[idx].data);
|
| }
|
| }
|
|
|
| @@ -1050,7 +1047,7 @@ Package::addItem(const char *name, uint8_t *data, int32_t length, UBool isDataOw
|
| } else {
|
| // same-name item found, replace it
|
| if(items[idx].isDataOwned) {
|
| - free(items[idx].data);
|
| + uprv_free(items[idx].data);
|
| }
|
|
|
| // keep the item's name since it is the same
|
| @@ -1089,7 +1086,7 @@ Package::removeItem(int32_t idx) {
|
| if(idx>=0) {
|
| // remove the item
|
| if(items[idx].isDataOwned) {
|
| - free(items[idx].data);
|
| + uprv_free(items[idx].data);
|
| }
|
|
|
| // move the following items up
|
|
|