]> granicus.if.org Git - liblinear/commitdiff
Check return value of setlocale().
authorTavian Barnes <tavianator@maluuba.com>
Wed, 3 Dec 2014 15:20:59 +0000 (10:20 -0500)
committerChih-Jen Lin <cjlin@csie.ntu.edu.tw>
Fri, 5 Dec 2014 03:30:55 +0000 (11:30 +0800)
setlocale() is allowed to return NULL.  In particular, this happens on
Bionic (Android's libc) because it doesn't support C locales.

Signed-off-by: Chih-Jen Lin <cjlin@csie.ntu.edu.tw>
linear.cpp

index 302e1e1b9449e878524abcf0f8db4dbca2f16f15..c9a97b82a178ecdb05bdbef9c66ffa8bcc6be032 100644 (file)
@@ -2592,7 +2592,10 @@ int save_model(const char *model_file_name, const struct model *model_)
        FILE *fp = fopen(model_file_name,"w");
        if(fp==NULL) return -1;
 
-       char *old_locale = strdup(setlocale(LC_ALL, NULL));
+       char *old_locale = setlocale(LC_ALL, NULL);
+       if (old_locale) {
+               old_locale = strdup(old_locale);
+       }
        setlocale(LC_ALL, "C");
 
        int nr_w;
@@ -2647,7 +2650,10 @@ struct model *load_model(const char *model_file_name)
 
        model_->label = NULL;
 
-       char *old_locale = strdup(setlocale(LC_ALL, NULL));
+       char *old_locale = setlocale(LC_ALL, NULL);
+       if (old_locale) {
+               old_locale = strdup(old_locale);
+       }
        setlocale(LC_ALL, "C");
 
        char cmd[81];