Home | History | Annotate | Download | only in powerpc-vsx
      1 /* contrib/powerpc-vsx/linux.c
      2  *
      3  * Copyright (c) 2017 Glenn Randers-Pehrson
      4  * Written by Vadim Barkov, 2017.
      5  * Last changed in libpng 1.6.29 [March 16, 2017]
      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  * STATUS: TESTED
     12  * BUG REPORTS: png-mng-implement (at) sourceforge.net
     13  *
     14  * png_have_vsx implemented for Linux by reading the widely available
     15  * pseudo-file /proc/cpuinfo.
     16  *
     17  * This code is strict ANSI-C and is probably moderately portable; it does
     18  * however use <stdio.h> and it assumes that /proc/cpuinfo is never localized.
     19  */
     20 
     21 #include <stdio.h>
     22 #include <string.h>
     23 #include <stdlib.h>
     24 #include "png.h"
     25 
     26 #ifndef MAXLINE
     27 #  define MAXLINE 1024
     28 #endif
     29 
     30 static int
     31 png_have_vsx(png_structp png_ptr)
     32 {
     33    FILE *f;
     34 
     35    const char *string = "altivec supported";
     36    char input[MAXLINE];
     37    char *token = NULL;
     38 
     39    PNG_UNUSED(png_ptr)
     40 
     41    f = fopen("/proc/cpuinfo", "r");
     42    if (f != NULL)
     43    {
     44       memset(input,0,MAXLINE);
     45       while(fgets(input,MAXLINE,f) != NULL)
     46       {
     47          token = strstr(input,string);
     48          if(token != NULL)
     49             return 1;
     50       }
     51    }
     52 #ifdef PNG_WARNINGS_SUPPORTED
     53    else
     54       png_warning(png_ptr, "/proc/cpuinfo open failed");
     55 #endif
     56    return 0;
     57 }
     58