diff options
Diffstat (limited to 'libpng/contrib/mips-msa/linux.c')
-rw-r--r-- | libpng/contrib/mips-msa/linux.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/libpng/contrib/mips-msa/linux.c b/libpng/contrib/mips-msa/linux.c new file mode 100644 index 00000000..140215c4 --- /dev/null +++ b/libpng/contrib/mips-msa/linux.c @@ -0,0 +1,64 @@ +/* contrib/mips-msa/linux.c + * + * Copyright (c) 2016 Glenn Randers-Pehrson + * Written by Mandar Sahastrabuddhe, 2016. + * Last changed in libpng 1.6.25beta03 [August 29, 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) + 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; +} |