Imported Upstream version 1.6.36
[platform/upstream/libpng.git] / contrib / powerpc-vsx / linux.c
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
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 }