-/* small helper functions */
-/* simpleregex allocates (and reallocates) the found buffer
- * don't forget to free it when you are done
- */
-static int simpleregex(char *buffer, char *regex, char **found) {
- int status;
- regex_t re;
- regmatch_t match[5];
-
- if (regcomp(&re, regex, 0) !=0) {
- fprintf(stderr,"internal error, regex failed!\n");
- exit(1);
- }
- status = regexec(&re,buffer,5,match,0);
- if(status == 0) {
- *found = realloc(*found,match[1].rm_eo-match[1].rm_so + 1);
- strncpy(*found,buffer+match[1].rm_so,match[1].rm_eo-match[1].rm_so);
- (*found)[match[1].rm_eo-match[1].rm_so] = '\0';
- }
- return(status == 0);
-}
-
-/* read in line of arbitrary length (important for SDA files that can
- * have lines that are tens of kB long
- * don't forget to free it when you are done
- */
-#define MYGETL_INCR 1024
-static char * mygetline(FILE * f) {
- size_t size = 0;
- size_t len = 0;
- char * buf = NULL;
-
- do {
- size += MYGETL_INCR;
- if ((buf = realloc(buf,size)) == NULL)
- break;
- fgets(buf+len,MYGETL_INCR,f);
- len = strlen(buf);
- } while (!feof(f) && buf[len-1]!='\n');
- return buf;
-}
-
-/* text matching, used to build very poor man's XML parser */
-int matchit(FILE *infd, char *regex, char *typeregex, char **found) {
- char *buffer;
-
- while (!feof(infd)) {
- buffer = mygetline(infd);
- if (buffer && simpleregex(buffer,regex,found)) {
- buffer = mygetline(infd);
- if (buffer && simpleregex(buffer,typeregex,found)) {
- return 1;
- }
- }
- }
- return 0;
-}
-