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 |