• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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@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
png_have_vsx(png_structp png_ptr)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