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