]> granicus.if.org Git - libjpeg-turbo/commitdiff
Make all get/putenv() calls compile-time optional
authorDRC <information@libjpeg-turbo.org>
Sat, 17 Mar 2018 05:06:10 +0000 (00:06 -0500)
committerDRC <information@libjpeg-turbo.org>
Sat, 17 Mar 2018 05:10:44 +0000 (00:10 -0500)
* Modify the SIMD dispatchers so they guard their usage of getenv() with
  the existing NO_GETENV preprocessor definition.
* Introduce a new NO_PUTENV preprocessor definition to guard the
  usage of putenv() in the TurboJPEG API library.

This at least puts Windows Store compatibility within the realm of
possibility, although further steps are required.

simd/jsimd_arm.c
simd/jsimd_arm64.c
simd/jsimd_i386.c
simd/jsimd_mips.c
simd/jsimd_powerpc.c
simd/jsimd_x86_64.c
turbojpeg.c

index 0b955cdd097c557151ccbc35dfbee6db076c51e8..0f0a88731a15cf520af466087ba98225d916adf5 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
  * Copyright (C) 2011, Nokia Corporation and/or its subsidiary(-ies).
- * Copyright (C) 2009-2011, 2013-2014, 2016, D. R. Commander.
+ * Copyright (C) 2009-2011, 2013-2014, 2016, 2018, D. R. Commander.
  * Copyright (C) 2015-2016, Matthieu Darbois.
  *
  * Based on the x86 SIMD extension for IJG JPEG library,
@@ -100,7 +100,9 @@ parse_proc_cpuinfo (int bufsize)
 LOCAL(void)
 init_simd (void)
 {
+#ifndef NO_GETENV
   char *env = NULL;
+#endif
 #if !defined(__ARM_NEON__) && defined(__linux__) || defined(ANDROID) || defined(__ANDROID__)
   int bufsize = 1024; /* an initial guess for the line buffer size limit */
 #endif
@@ -123,6 +125,7 @@ init_simd (void)
   }
 #endif
 
+#ifndef NO_GETENV
   /* Force different settings through environment variables */
   env = getenv("JSIMD_FORCENEON");
   if ((env != NULL) && (strcmp(env, "1") == 0))
@@ -133,6 +136,7 @@ init_simd (void)
   env = getenv("JSIMD_NOHUFFENC");
   if ((env != NULL) && (strcmp(env, "1") == 0))
     simd_huffman = 0;
+#endif
 }
 
 GLOBAL(int)
index f6e9736434c720f90d5135b42bdfba07b2b1c436..e2e7b0086f86aa9370c862c9832644cea7f0d081 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
  * Copyright (C) 2011, Nokia Corporation and/or its subsidiary(-ies).
- * Copyright (C) 2009-2011, 2013-2014, 2016, D. R. Commander.
+ * Copyright (C) 2009-2011, 2013-2014, 2016, 2018, D. R. Commander.
  * Copyright (C) 2015-2016, Matthieu Darbois.
  *
  * Based on the x86 SIMD extension for IJG JPEG library,
@@ -121,7 +121,9 @@ parse_proc_cpuinfo (int bufsize)
 LOCAL(void)
 init_simd (void)
 {
+#ifndef NO_GETENV
   char *env = NULL;
+#endif
 #if defined(__linux__) || defined(ANDROID) || defined(__ANDROID__)
   int bufsize = 1024; /* an initial guess for the line buffer size limit */
 #endif
@@ -140,6 +142,7 @@ init_simd (void)
   }
 #endif
 
+#ifndef NO_GETENV
   /* Force different settings through environment variables */
   env = getenv("JSIMD_FORCENEON");
   if ((env != NULL) && (strcmp(env, "1") == 0))
@@ -160,6 +163,7 @@ init_simd (void)
     simd_features |= JSIMD_FASTST3;
   if ((env != NULL) && (strcmp(env, "0") == 0))
     simd_features &= ~JSIMD_FASTST3;
+#endif
 }
 
 GLOBAL(int)
index 6da8bd8913c4fcddd71940d72a440f56b3a936f9..9e274e2a45ff2ea41023cbc63065ac371001f85a 100644 (file)
@@ -2,7 +2,7 @@
  * jsimd_i386.c
  *
  * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
- * Copyright (C) 2009-2011, 2013-2014, 2016, D. R. Commander.
+ * Copyright (C) 2009-2011, 2013-2014, 2016, 2018, D. R. Commander.
  * Copyright (C) 2015, Matthieu Darbois.
  *
  * Based on the x86 SIMD extension for IJG JPEG library,
@@ -41,13 +41,16 @@ static unsigned int simd_huffman = 1;
 LOCAL(void)
 init_simd (void)
 {
+#ifndef NO_GETENV
   char *env = NULL;
+#endif
 
   if (simd_support != ~0U)
     return;
 
   simd_support = jpeg_simd_cpu_support();
 
+#ifndef NO_GETENV
   /* Force different settings through environment variables */
   env = getenv("JSIMD_FORCEMMX");
   if ((env != NULL) && (strcmp(env, "1") == 0))
@@ -67,6 +70,7 @@ init_simd (void)
   env = getenv("JSIMD_NOHUFFENC");
   if ((env != NULL) && (strcmp(env, "1") == 0))
     simd_huffman = 0;
+#endif
 }
 
 GLOBAL(int)
index 02e90cd9f0c037c6405c3c5da20514d7c890e19e..df73a36cfdd30fb16764faad01e2dcf05e342469 100644 (file)
@@ -2,7 +2,7 @@
  * jsimd_mips.c
  *
  * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
- * Copyright (C) 2009-2011, 2014, 2016, D. R. Commander.
+ * Copyright (C) 2009-2011, 2014, 2016, 2018, D. R. Commander.
  * Copyright (C) 2013-2014, MIPS Technologies, Inc., California.
  * Copyright (C) 2015, Matthieu Darbois.
  *
@@ -63,7 +63,9 @@ parse_proc_cpuinfo(const char* search_string)
 LOCAL(void)
 init_simd (void)
 {
+#ifndef NO_GETENV
   char *env = NULL;
+#endif
 
   if (simd_support != ~0U)
     return;
@@ -80,6 +82,7 @@ init_simd (void)
     return;
 #endif
 
+#ifndef NO_GETENV
   /* Force different settings through environment variables */
   env = getenv("JSIMD_FORCEDSPR2");
   if ((env != NULL) && (strcmp(env, "1") == 0))
@@ -87,6 +90,7 @@ init_simd (void)
   env = getenv("JSIMD_FORCENONE");
   if ((env != NULL) && (strcmp(env, "1") == 0))
     simd_support = 0;
+#endif
 }
 
 static const int mips_idct_ifast_coefs[4] = {
index 47dd746f0dcf39ec3ff5f4268910d1bb43194089..9acde065b2240694db62b6cf6fd167c2f4480cdc 100644 (file)
@@ -2,7 +2,7 @@
  * jsimd_powerpc.c
  *
  * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
- * Copyright (C) 2009-2011, 2014-2016, D. R. Commander.
+ * Copyright (C) 2009-2011, 2014-2016, 2018, D. R. Commander.
  * Copyright (C) 2015, Matthieu Darbois.
  *
  * Based on the x86 SIMD extension for IJG JPEG library,
@@ -109,7 +109,9 @@ parse_proc_cpuinfo (int bufsize)
 LOCAL(void)
 init_simd (void)
 {
+#ifndef NO_GETENV
   char *env = NULL;
+#endif
 #if !defined(__ALTIVEC__) && (defined(__linux__) || defined(ANDROID) || defined(__ANDROID__))
   int bufsize = 1024; /* an initial guess for the line buffer size limit */
 #elif defined(__amigaos4__)
@@ -142,6 +144,7 @@ init_simd (void)
     simd_support |= JSIMD_ALTIVEC;
 #endif
 
+#ifndef NO_GETENV
   /* Force different settings through environment variables */
   env = getenv("JSIMD_FORCEALTIVEC");
   if ((env != NULL) && (strcmp(env, "1") == 0))
@@ -149,6 +152,7 @@ init_simd (void)
   env = getenv("JSIMD_FORCENONE");
   if ((env != NULL) && (strcmp(env, "1") == 0))
     simd_support = 0;
+#endif
 }
 
 GLOBAL(int)
index a62bcdb0eedf936a3f63cf89f01b0a15a6ffc2be..180b5082964606e4cab0624f5ff357756b132e74 100644 (file)
@@ -2,7 +2,7 @@
  * jsimd_x86_64.c
  *
  * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
- * Copyright (C) 2009-2011, 2014, 2016, D. R. Commander.
+ * Copyright (C) 2009-2011, 2014, 2016, 2018, D. R. Commander.
  * Copyright (C) 2015, Matthieu Darbois.
  *
  * Based on the x86 SIMD extension for IJG JPEG library,
@@ -41,13 +41,16 @@ static unsigned int simd_huffman = 1;
 LOCAL(void)
 init_simd (void)
 {
+#ifndef NO_GETENV
   char *env = NULL;
+#endif
 
   if (simd_support != ~0U)
     return;
 
   simd_support = JSIMD_SSE2 | JSIMD_SSE;
 
+#ifndef NO_GETENV
   /* Force different settings through environment variables */
   env = getenv("JSIMD_FORCENONE");
   if ((env != NULL) && (strcmp(env, "1") == 0))
@@ -55,6 +58,7 @@ init_simd (void)
   env = getenv("JSIMD_NOHUFFENC");
   if ((env != NULL) && (strcmp(env, "1") == 0))
     simd_huffman = 0;
+#endif
 }
 
 GLOBAL(int)
index 662c68f6048bbaecc0adec5850f8e399c9f8dbcf..df907b09e6c4232a6b85fa2c9fda1249af8deac7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C)2009-2017 D. R. Commander.  All Rights Reserved.
+ * Copyright (C)2009-2018 D. R. Commander.  All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -796,9 +796,11 @@ DLLEXPORT int DLLCALL tjCompress2(tjhandle handle, const unsigned char *srcBuf,
        cinfo->image_width=width;
        cinfo->image_height=height;
 
+#ifndef NO_PUTENV
        if(flags&TJFLAG_FORCEMMX) putenv("JSIMD_FORCEMMX=1");
        else if(flags&TJFLAG_FORCESSE) putenv("JSIMD_FORCESSE=1");
        else if(flags&TJFLAG_FORCESSE2) putenv("JSIMD_FORCESSE2=1");
+#endif
 
        if(flags&TJFLAG_NOREALLOC)
        {
@@ -912,9 +914,11 @@ DLLEXPORT int DLLCALL tjEncodeYUVPlanes(tjhandle handle,
        cinfo->image_width=width;
        cinfo->image_height=height;
 
+#ifndef NO_PUTENV
        if(flags&TJFLAG_FORCEMMX) putenv("JSIMD_FORCEMMX=1");
        else if(flags&TJFLAG_FORCESSE) putenv("JSIMD_FORCESSE=1");
        else if(flags&TJFLAG_FORCESSE2) putenv("JSIMD_FORCESSE2=1");
+#endif
 
        if(setCompDefaults(cinfo, pixelFormat, subsamp, -1, flags)==-1) return -1;
 
@@ -1111,9 +1115,11 @@ DLLEXPORT int DLLCALL tjCompressFromYUVPlanes(tjhandle handle,
        cinfo->image_width=width;
        cinfo->image_height=height;
 
+#ifndef NO_PUTENV
        if(flags&TJFLAG_FORCEMMX) putenv("JSIMD_FORCEMMX=1");
        else if(flags&TJFLAG_FORCESSE) putenv("JSIMD_FORCESSE=1");
        else if(flags&TJFLAG_FORCESSE2) putenv("JSIMD_FORCESSE2=1");
+#endif
 
        if(flags&TJFLAG_NOREALLOC)
        {
@@ -1392,9 +1398,11 @@ DLLEXPORT int DLLCALL tjDecompress2(tjhandle handle,
                || height<0 || pixelFormat<0 || pixelFormat>=TJ_NUMPF)
                _throw("tjDecompress2(): Invalid argument");
 
+#ifndef NO_PUTENV
        if(flags&TJFLAG_FORCEMMX) putenv("JSIMD_FORCEMMX=1");
        else if(flags&TJFLAG_FORCESSE) putenv("JSIMD_FORCESSE=1");
        else if(flags&TJFLAG_FORCESSE2) putenv("JSIMD_FORCESSE2=1");
+#endif
 
        if(setjmp(this->jerr.setjmp_buffer))
        {
@@ -1592,9 +1600,11 @@ DLLEXPORT int DLLCALL tjDecodeYUVPlanes(tjhandle handle,
        dinfo->image_width=width;
        dinfo->image_height=height;
 
+#ifndef NO_PUTENV
        if(flags&TJFLAG_FORCEMMX) putenv("JSIMD_FORCEMMX=1");
        else if(flags&TJFLAG_FORCESSE) putenv("JSIMD_FORCESSE=1");
        else if(flags&TJFLAG_FORCESSE2) putenv("JSIMD_FORCESSE2=1");
+#endif
 
        if(setDecodeDefaults(dinfo, pixelFormat, subsamp, flags)==-1)
        {
@@ -1773,9 +1783,11 @@ DLLEXPORT int DLLCALL tjDecompressToYUVPlanes(tjhandle handle,
                || height<0)
                _throw("tjDecompressToYUVPlanes(): Invalid argument");
 
+#ifndef NO_PUTENV
        if(flags&TJFLAG_FORCEMMX) putenv("JSIMD_FORCEMMX=1");
        else if(flags&TJFLAG_FORCESSE) putenv("JSIMD_FORCESSE=1");
        else if(flags&TJFLAG_FORCESSE2) putenv("JSIMD_FORCESSE2=1");
+#endif
 
        if(setjmp(this->jerr.setjmp_buffer))
        {
@@ -2037,9 +2049,11 @@ DLLEXPORT int DLLCALL tjTransform(tjhandle handle,
                || t==NULL || flags<0)
                _throw("tjTransform(): Invalid argument");
 
+#ifndef NO_PUTENV
        if(flags&TJFLAG_FORCEMMX) putenv("JSIMD_FORCEMMX=1");
        else if(flags&TJFLAG_FORCESSE) putenv("JSIMD_FORCESSE=1");
        else if(flags&TJFLAG_FORCESSE2) putenv("JSIMD_FORCESSE2=1");
+#endif
 
        if((xinfo=(jpeg_transform_info *)malloc(sizeof(jpeg_transform_info)*n))
                ==NULL)