
/* 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;
}
