123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- A combination of issue & patches from...
- https://bugs.icu-project.org/trac/ticket/7680
- https://bugs.icu-project.org/trac/changeset/28002
- https://bugs.icu-project.org/trac/changeset/28124
- Enlarged buffers more since include files for pkgdata can grow
- significantly when cross-compiling.
- This ONLY affects building.
- Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
- diff -Nura icu.orig/source/tools/pkgdata/pkgdata.cpp icu/source/tools/pkgdata/pkgdata.cpp
- --- icu.orig/source/tools/pkgdata/pkgdata.cpp 2010-09-29 15:37:28.000000000 -0300
- +++ icu/source/tools/pkgdata/pkgdata.cpp 2010-12-21 15:53:30.252554924 -0300
- @@ -97,8 +97,9 @@
- #define PKGDATA_FILE_SEP_STRING U_FILE_SEP_STRING
- #endif
-
- -#define LARGE_BUFFER_MAX_SIZE 2048
- -#define SMALL_BUFFER_MAX_SIZE 512
- +#define LARGE_BUFFER_MAX_SIZE 8192
- +#define MEDIUM_BUFFER_MAX_SIZE 4096
- +#define SMALL_BUFFER_MAX_SIZE 2048
-
- static void loadLists(UPKGOptions *o, UErrorCode *status);
-
- @@ -472,29 +473,48 @@
- }
-
- static int runCommand(const char* command, UBool specialHandling) {
- - char cmd[SMALL_BUFFER_MAX_SIZE];
- + char *cmd = NULL;
- + char cmdBuffer[SMALL_BUFFER_MAX_SIZE];
- + int32_t len = strlen(command);
- +
- + if (len == 0) {
- + return 0;
- + }
-
- if (!specialHandling) {
- +#if defined(USING_CYGWIN) || defined(OS400)
- +#define CMD_PADDING_SIZE 20
- + if ((len + CMD_PADDING_SIZE) >= SMALL_BUFFER_MAX_SIZE) {
- + cmd = (char *)uprv_malloc(len + CMD_PADDING_SIZE);
- + } else {
- + cmd = cmdBuffer;
- + }
- #ifdef USING_CYGWIN
- sprintf(cmd, "bash -c \"%s\"", command);
-
- #elif defined(OS400)
- sprintf(cmd, "QSH CMD('%s')", command);
- +#endif
- #else
- goto normal_command_mode;
- #endif
- } else {
- normal_command_mode:
- - sprintf(cmd, "%s", command);
- + cmd = (char *)command;
- }
- -
- +
- printf("pkgdata: %s\n", cmd);
- int result = system(cmd);
- - if (result != 0) {
- - printf("-- return status = %d\n", result);
- + if (result != 0) {
- + printf("-- return status = %d\n", result);
- + }
- +
- + if (cmd != cmdBuffer && cmd != command) {
- + uprv_free(cmd);
- }
- - return result;
- -}
- +
- + return result;
- +}
-
- #define LN_CMD "ln -s"
- #define RM_CMD "rm -f"
- @@ -586,7 +606,7 @@
- pkgDataFlags = (char**)uprv_malloc(sizeof(char*) * PKGDATA_FLAGS_SIZE);
- if (pkgDataFlags != NULL) {
- for (int32_t i = 0; i < PKGDATA_FLAGS_SIZE; i++) {
- - pkgDataFlags[i] = (char*)uprv_malloc(sizeof(char) * SMALL_BUFFER_MAX_SIZE);
- + pkgDataFlags[i] = (char*)uprv_malloc(sizeof(char) * MEDIUM_BUFFER_MAX_SIZE);
- if (pkgDataFlags[i] != NULL) {
- pkgDataFlags[i][0] = 0;
- } else {
|