--- /dev/null 2010-02-01 20:37:03.729168572 +0100 +++ b/orc/orcutils.c 2010-02-02 12:12:07.071430049 +0100 @@ -0,0 +1,172 @@ +/* + * ORC - Library of Optimized Inner Loops + * Copyright (c) 2003,2004 David A. Schleef + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include +#include + +#include +#include +#include + +/** + * SECTION:orcutils + * @title: Utility functions + * @short_description: Orc utility functions + */ + +int +get_file_int (const char *file, int *value) +{ + char buffer[20]; + char *endptr; + int fd; + int n; + + fd = open (file, O_RDONLY); + if (fd < 0) return 0; + + n = read(fd, buffer, 19); + close(fd); + if (n < 0) { + return 0; + } + buffer[n] = 0; + + *value = strtol (buffer, &endptr, 0); + + if (endptr[0] == 0 || endptr[0] == '\n') return 1; + return 0; +} + +char * +get_file (const char *filename) +{ + char *cpuinfo; + int fd; + int n; + + cpuinfo = malloc(4096); + if (cpuinfo == NULL) return NULL; + + fd = open(filename, O_RDONLY); + if (fd < 0) { + free (cpuinfo); + return NULL; + } + + n = read(fd, cpuinfo, 4095); + if (n < 0) { + free (cpuinfo); + close (fd); + return NULL; + } + cpuinfo[n] = 0; + + close (fd); + + return cpuinfo; +} + +char * +get_cpuinfo_line (char *cpuinfo, const char *tag) +{ + char *flags; + char *end; + char *colon; + + flags = strstr(cpuinfo,tag); + if (flags == NULL) return NULL; + + end = strchr(flags, '\n'); + if (end == NULL) return NULL; + colon = strchr (flags, ':'); + if (colon == NULL) return NULL; + colon++; + if(colon >= end) return NULL; + + return _strndup (colon, end-colon); +} + +char * +_strndup (const char *s, int n) +{ + char *r; + r = malloc (n+1); + memcpy(r,s,n); + r[n]=0; + + return r; +} + +char ** +strsplit (char *s) +{ + char **list = NULL; + char *tok; + int n = 0; + + while (*s == ' ') s++; + + list = malloc (1 * sizeof(char *)); + while (*s) { + tok = s; + while (*s && *s != ' ') s++; + + list[n] = _strndup (tok, s - tok); + while (*s && *s == ' ') s++; + list = realloc (list, (n + 2) * sizeof(char *)); + n++; + } + + list[n] = NULL; + return list; +} + +char * +get_tag_value (char *s, const char *tag) +{ + char *flags; + char *end; + char *colon; + + flags = strstr(s,tag); + if (flags == NULL) return NULL; + + end = strchr(flags, '\n'); + if (end == NULL) return NULL; + colon = strchr (flags, ':'); + if (colon == NULL) return NULL; + colon++; + if(colon >= end) return NULL; + + return _strndup (colon, end-colon); +} + + --- a/orc/Makefile.am 2010-02-02 12:13:47.091383078 +0100 +++ b/orc/Makefile.am 2010-02-02 12:13:53.087383965 +0100 @@ -13,6 +13,7 @@ orc.c \ orcexecutor.c \ orcfunctions.c \ + orcutils.c \ orcrule.c \ orccodemem.c \ orcprogram.c \