mirror of
				https://git.code.sf.net/p/libpng/code.git
				synced 2025-07-10 18:04:09 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			68 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
 | 
						|
/* contrib/mips-msa/linux.c
 | 
						|
 *
 | 
						|
 * Copyright (c) 2020 Cosmin Truta
 | 
						|
 * Copyright (c) 2016 Glenn Randers-Pehrson
 | 
						|
 * Written by Mandar Sahastrabuddhe, 2016.
 | 
						|
 *
 | 
						|
 * This code is released under the libpng license.
 | 
						|
 * For conditions of distribution and use, see the disclaimer
 | 
						|
 * and license in png.h
 | 
						|
 *
 | 
						|
 * SEE contrib/mips-msa/README before reporting bugs
 | 
						|
 *
 | 
						|
 * STATUS: SUPPORTED
 | 
						|
 * BUG REPORTS: png-mng-implement@sourceforge.net
 | 
						|
 *
 | 
						|
 * png_have_msa implemented for Linux by reading the widely available
 | 
						|
 * pseudo-file /proc/cpuinfo.
 | 
						|
 *
 | 
						|
 * This code is strict ANSI-C and is probably moderately portable; it does
 | 
						|
 * however use <stdio.h> and it assumes that /proc/cpuinfo is never localized.
 | 
						|
 */
 | 
						|
 | 
						|
#include <stdio.h>
 | 
						|
#include <string.h>
 | 
						|
#include <stdlib.h>
 | 
						|
 | 
						|
static int
 | 
						|
png_have_msa(png_structp png_ptr)
 | 
						|
{
 | 
						|
   FILE *f = fopen("/proc/cpuinfo", "rb");
 | 
						|
 | 
						|
   char *string = "msa";
 | 
						|
   char word[10];
 | 
						|
 | 
						|
   if (f != NULL)
 | 
						|
   {
 | 
						|
      while(!feof(f))
 | 
						|
      {
 | 
						|
         int ch = fgetc(f);
 | 
						|
         static int i = 0;
 | 
						|
 | 
						|
         while(!(ch <= 32))
 | 
						|
         {
 | 
						|
            word[i++] = ch;
 | 
						|
            ch = fgetc(f);
 | 
						|
         }
 | 
						|
 | 
						|
         int val = strcmp(string, word);
 | 
						|
 | 
						|
         if (val == 0) {
 | 
						|
            fclose(f);
 | 
						|
            return 1;
 | 
						|
         }
 | 
						|
 | 
						|
         i = 0;
 | 
						|
         memset(word, 0, 10);
 | 
						|
      }
 | 
						|
 | 
						|
      fclose(f);
 | 
						|
   }
 | 
						|
#ifdef PNG_WARNINGS_SUPPORTED
 | 
						|
   else
 | 
						|
      png_warning(png_ptr, "/proc/cpuinfo open failed");
 | 
						|
#endif
 | 
						|
   return 0;
 | 
						|
}
 |