]> granicus.if.org Git - icu/commitdiff
ICU-13199 use std::getline(istream, string) to avoid line length limit
authorMarkus Scherer <markus.icu@gmail.com>
Fri, 1 Sep 2017 16:21:47 +0000 (16:21 +0000)
committerMarkus Scherer <markus.icu@gmail.com>
Fri, 1 Sep 2017 16:21:47 +0000 (16:21 +0000)
X-SVN-Rev: 40365

icu4c/source/tools/gennorm2/gennorm2.cpp

index 69d0a38c2351a8e44df37fe367f4cd3dc6ba6d98..efc2661ac054b142fbecfaaa64fad8b1f4fea256 100644 (file)
 #include "unicode/utypes.h"
 #include "n2builder.h"
 
+#include <fstream>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string>
 #include <string.h>
 #include "unicode/errorcode.h"
 #include "unicode/localpointer.h"
@@ -44,10 +46,8 @@ U_NAMESPACE_BEGIN
 
 UBool beVerbose=FALSE, haveCopyright=TRUE;
 
-U_DEFINE_LOCAL_OPEN_POINTER(LocalStdioFilePointer, FILE, fclose);
-
 #if !UCONFIG_NO_NORMALIZATION
-void parseFile(FILE *f, Normalizer2DataBuilder &builder);
+void parseFile(std::ifstream &f, Normalizer2DataBuilder &builder);
 #endif
 
 /* -------------------------------------------------------------------------- */
@@ -202,13 +202,13 @@ main(int argc, char* argv[]) {
             continue;
         }
         filename.append(argv[i], errorCode);
-        LocalStdioFilePointer f(fopen(filename.data(), "r"));
-        if(f==NULL) {
+        std::ifstream f(filename.data());
+        if(f.fail()) {
             fprintf(stderr, "gennorm2 error: unable to open %s\n", filename.data());
             exit(U_FILE_ACCESS_ERROR);
         }
         builder->setOverrideHandling(Normalizer2DataBuilder::OVERRIDE_PREVIOUS);
-        parseFile(f.getAlias(), *builder);
+        parseFile(f, *builder);
         filename.truncate(pathLength);
     }
 
@@ -230,11 +230,12 @@ main(int argc, char* argv[]) {
 
 #if !UCONFIG_NO_NORMALIZATION
 
-void parseFile(FILE *f, Normalizer2DataBuilder &builder) {
+void parseFile(std::ifstream &f, Normalizer2DataBuilder &builder) {
     IcuToolErrorCode errorCode("gennorm2/parseFile()");
-    char line[300];
+    std::string lineString;
     uint32_t startCP, endCP;
-    while(NULL!=fgets(line, (int)sizeof(line), f)) {
+    while(std::getline(f, lineString)) {
+        char *line = &lineString.front();
         char *comment=(char *)strchr(line, '#');
         if(comment!=NULL) {
             *comment=0;