From 569572135ad16ccd7f81d0ef8ac0d37f5645c736 Mon Sep 17 00:00:00 2001 From: Christos Zoulas Date: Wed, 10 Feb 2016 15:57:40 +0000 Subject: [PATCH] PR/518: Fall back to use setlocale() for the OS's that don't support newlocale()/uselocale(). This is necessary because some regex patterns we use (apple) have non-ascii characters in them. --- src/file.h | 4 +++- src/funcs.c | 6 +++++- src/readcdf.c | 6 +++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/file.h b/src/file.h index 2b373473..6e906749 100644 --- a/src/file.h +++ b/src/file.h @@ -27,7 +27,7 @@ */ /* * file.h - definitions for file(1) program - * @(#)$File: file.h,v 1.175 2016/01/19 04:17:07 christos Exp $ + * @(#)$File: file.h,v 1.176 2016/02/10 15:57:40 christos Exp $ */ #ifndef __file_h__ @@ -509,6 +509,8 @@ typedef struct { #define USE_C_LOCALE locale_t old_lc_ctype; locale_t c_lc_ctype; +#else + char *old_lc_ctype; #endif int rc; regex_t rx; diff --git a/src/funcs.c b/src/funcs.c index a2667721..d26147b3 100644 --- a/src/funcs.c +++ b/src/funcs.c @@ -27,7 +27,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: funcs.c,v 1.87 2015/09/22 15:40:32 christos Exp $") +FILE_RCSID("@(#)$File: funcs.c,v 1.88 2016/02/10 15:57:40 christos Exp $") #endif /* lint */ #include "magic.h" @@ -494,6 +494,8 @@ file_regcomp(file_regex_t *rx, const char *pat, int flags) assert(rx->c_lc_ctype != NULL); rx->old_lc_ctype = uselocale(rx->c_lc_ctype); assert(rx->old_lc_ctype != NULL); +#else + rx->old_lc_ctype = setlocale(LC_CTYPE, "C"); #endif rx->pat = pat; @@ -516,6 +518,8 @@ file_regfree(file_regex_t *rx) #ifdef USE_C_LOCALE (void)uselocale(rx->old_lc_ctype); freelocale(rx->c_lc_ctype); +#else + (void)setlocale(LC_CTYPE, rx->old_lc_ctype); #endif } diff --git a/src/readcdf.c b/src/readcdf.c index 2ff61bfb..fdc90393 100644 --- a/src/readcdf.c +++ b/src/readcdf.c @@ -26,7 +26,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: readcdf.c,v 1.54 2015/11/23 21:20:50 christos Exp $") +FILE_RCSID("@(#)$File: readcdf.c,v 1.55 2016/02/10 15:57:40 christos Exp $") #endif #include @@ -120,6 +120,8 @@ cdf_app_to_mime(const char *vbuf, const struct nv *nv) assert(c_lc_ctype != NULL); old_lc_ctype = uselocale(c_lc_ctype); assert(old_lc_ctype != NULL); +#else + char *old_lc_ctype = setlocale(LC_CTYPE, "C"); #endif for (i = 0; nv[i].pattern != NULL; i++) if (strcasestr(vbuf, nv[i].pattern) != NULL) { @@ -132,6 +134,8 @@ cdf_app_to_mime(const char *vbuf, const struct nv *nv) #ifdef USE_C_LOCALE (void)uselocale(old_lc_ctype); freelocale(c_lc_ctype); +#else + setlocale(LC_CTYPE, old_lc_ctype); #endif return rv; } -- 2.50.1