#include #include #include #include "utils.h" #define DEBUG 0 void chomp(char *buffer, int length) { char *ref = buffer; for (ref += length; ref != buffer; ref--) { if ((*ref) == '\n' || (*ref) == '\r') { (*ref) = '\0'; } else if ((*ref) != '\0') { break; } } } /* FIXME: please rewrite this routine, its bad! */ /* btw, stopped using it :) */ int contains(char *buffer, char *pattern) { int length = strlen(buffer); int patlen = strlen(pattern); int pos = 0; while((*(buffer + pos)) != '\0' && pos < (length + 1)) { if(tolower(*(buffer + pos)) == tolower((*pattern))) { if(strncasecmp((buffer + pos),pattern,patlen) == 0) { return 1; } else { ++pos; } } else { ++pos; } } return 0; } char *word(char *data, int pos) { char *begin; char *end; char *nword; int i; for (i = 1; i < pos; ++i) { while(isspace(*data) && (*data) != '\0') { ++data; } while(!isspace(*data) && (*data) != '\0') { ++data; } } while(isspace(*data) && (*data) != '\0') { ++data; } begin = data; while(!isspace(*data) && (*data) != '\0') { ++data; } end = data; i = (end - begin); nword = malloc(i + 1); if (i > 0) { strncpy(nword, begin, i); } (*(nword + i)) = '\0'; if(DEBUG) {fprintf(stderr,"\tword:%s\n",nword);} return nword; } char *word_q(char *data, int pos) { char *begin; char *end; char *nword; int i; for (i = 1; i < pos; ++i) { while(isspace(*data) && (*data) != '\0') { ++data; } if((*data) == '"') { ++data; while((*data) != '"' && (*data) != '\0') { ++data; } if((*data) != '\0') { ++data; } } else { while(!isspace(*data) && (*data) != '\0' && (*data) != '"') { ++data; } } } while(isspace(*data) && (*data) != '\0') { ++data; } begin = data; if((*data) == '"') { if((*data) != '\0') { ++data; } while((*data) != '"' && (*data) != '\0') { ++data; } if((*data) != '\0') { ++data; } } else { while(!isspace(*data) && (*data) != '\0') { ++data; } } end = data; i = (end - begin); nword = malloc(i + 1); if (i > 0) { strncpy(nword, begin, i); } (*(nword + i)) = '\0'; if(DEBUG) {fprintf(stderr,"\tword_q:%s\n",nword);} return nword; } /* Same as Word but returns pointer with Quote Handling */ char *pword_q(char *data, int pos) { int i; for (i = 1; i < pos; ++i) { while(isspace(*data) && (*data) != '\0') { ++data; } if((*data) == '"') { if((*data) != '\0') { ++data; } while((*data) != '"' && (*data) != '\0') { ++data; } if((*data) != '\0') { ++data; } } else { while(!isspace(*data) && (*data) != '\0' && (*data) != '"') { ++data; } } } if(isspace(*data) && (*data) != '\0') { while(isspace(*data) && (*data) != '\0') { ++data; } } return data; } /* None Alphanumerics to white space */ void nalnum_to_ws(char *buffer) { while(*buffer != '\0') { if(!isalnum(*buffer) || !isspace(*buffer)) { *buffer = ' '; } ++buffer; } } void de_quote(char *buffer) { char *buf = buffer; char *temp; if(*buffer == '"') { while(*buf != '\0') { temp = buf; ++buf; *temp = *buf; } if(*(temp - 1) == '"') { *(temp - 1) = '\0'; } } if(DEBUG) {fprintf(stderr,"de_quote: %s\n",buffer);} }