Home | History | Annotate | Download | only in mips-msa
      1 /* contrib/mips-msa/linux.c
      2  *
      3  * Copyright (c) 2016 Glenn Randers-Pehrson
      4  * Written by Mandar Sahastrabuddhe, 2016.
      5  * Last changed in libpng 1.6.25beta03 [August 29, 2016]
      6  *
      7  * This code is released under the libpng license.
      8  * For conditions of distribution and use, see the disclaimer
      9  * and license in png.h
     10  *
     11  * SEE contrib/mips-msa/README before reporting bugs
     12  *
     13  * STATUS: SUPPORTED
     14  * BUG REPORTS: png-mng-implement (at) sourceforge.net
     15  *
     16  * png_have_msa implemented for Linux by reading the widely available
     17  * pseudo-file /proc/cpuinfo.
     18  *
     19  * This code is strict ANSI-C and is probably moderately portable; it does
     20  * however use <stdio.h> and it assumes that /proc/cpuinfo is never localized.
     21  */
     22 
     23 #include <stdio.h>
     24 #include <string.h>
     25 #include <stdlib.h>
     26 
     27 static int
     28 png_have_msa(png_structp png_ptr)
     29 {
     30    FILE *f = fopen("/proc/cpuinfo", "rb");
     31 
     32    char *string = "msa";
     33    char word[10];
     34 
     35    if (f != NULL)
     36    {
     37       while(!feof(f))
     38       {
     39          int ch = fgetc(f);
     40          static int i = 0;
     41 
     42          while(!(ch <= 32))
     43          {
     44             word[i++] = ch;
     45             ch = fgetc(f);
     46          }
     47 
     48          int val = strcmp(string, word);
     49 
     50          if (val == 0)
     51             return 1;
     52 
     53          i = 0;
     54          memset(word, 0, 10);
     55       }
     56 
     57       fclose(f);
     58    }
     59 #ifdef PNG_WARNINGS_SUPPORTED
     60    else
     61       png_warning(png_ptr, "/proc/cpuinfo open failed");
     62 #endif
     63    return 0;
     64 }
     65