static int32_t pkg_installFileMode(const char *installDir, const char *srcDir, const char *fileListName) { int32_t result = 0; char cmd[SMALL_BUFFER_MAX_SIZE] = ""; if (!T_FileStream_file_exists(installDir)) { UErrorCode status = U_ZERO_ERROR; uprv_mkdir(installDir, &status); if (U_FAILURE(status)) { fprintf(stderr, "Error creating installation directory: %s\n", installDir); return -1; } } #ifndef U_WINDOWS_WITH_MSVC char buffer[SMALL_BUFFER_MAX_SIZE] = ""; FileStream *f = T_FileStream_open(fileListName, "r"); if (f != NULL) { for(;;) { if (T_FileStream_readLine(f, buffer, SMALL_BUFFER_MAX_SIZE) != NULL) { /* Remove new line character. */ buffer[uprv_strlen(buffer)-1] = 0; sprintf(cmd, "%s %s%s%s %s%s%s", pkgDataFlags[INSTALL_CMD], srcDir, PKGDATA_FILE_SEP_STRING, buffer, installDir, PKGDATA_FILE_SEP_STRING, buffer); result = system(cmd); if (result != 0) { fprintf(stderr, "Failed to install data file with command: %s\n", cmd); break; } } else { if (!T_FileStream_eof(f)) { fprintf(stderr, "Failed to read line from file: %s\n", fileListName); result = -1; } break; } } T_FileStream_close(f); } else { result = -1; fprintf(stderr, "Unable to open list file: %s\n", fileListName); } #else sprintf(cmd, "%s %s %s %s", WIN_INSTALL_CMD, srcDir, installDir, WIN_INSTALL_CMD_FLAGS); result = system(cmd); if (result != 0) { fprintf(stderr, "Failed to install data file with command: %s\n", cmd); } #endif return result; }
static void makeFullFilenameAndDirs(const char *path, const char *name, char *filename, int32_t capacity) { char *sep; UErrorCode errorCode; makeFullFilename(path, name, filename, capacity); // make tree directories errorCode=U_ZERO_ERROR; sep=strchr(filename, 0)-strlen(name); while((sep=strchr(sep, U_FILE_SEP_CHAR))!=NULL) { if(sep!=filename) { *sep=0; // truncate temporarily uprv_mkdir(filename, &errorCode); if(U_FAILURE(errorCode)) { fprintf(stderr, "icupkg: unable to create tree directory \"%s\"\n", filename); exit(U_FILE_ACCESS_ERROR); } } *sep++=U_FILE_SEP_CHAR; // restore file separator character } }