From: Tavian Barnes Date: Wed, 3 Dec 2014 15:20:59 +0000 (-0500) Subject: Check return value of setlocale(). X-Git-Tag: v200~7 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=936e04e837c2877a0ac048753957a16d48231033;p=liblinear Check return value of setlocale(). 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 --- diff --git a/linear.cpp b/linear.cpp index 302e1e1..c9a97b8 100644 --- a/linear.cpp +++ b/linear.cpp @@ -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];