diff options
Diffstat (limited to 'abs/core-testing/udev/resolve-modalias.c')
-rw-r--r-- | abs/core-testing/udev/resolve-modalias.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/abs/core-testing/udev/resolve-modalias.c b/abs/core-testing/udev/resolve-modalias.c new file mode 100644 index 0000000..d1680b1 --- /dev/null +++ b/abs/core-testing/udev/resolve-modalias.c @@ -0,0 +1,62 @@ +#include <stdio.h> +#include <fnmatch.h> +#include <string.h> +#include <malloc.h> + +static char *getline(FILE *file) { + static size_t size = 1024; + static char *buf = NULL; + static unsigned int i = 0, r = 0;; + + if(buf == NULL) + buf = (char*)malloc(size); + + if(i) { + memmove(buf, buf+i, size-i); + r -= i; + i = 0; + } + + while(1) { + if(i == size) { + size *= 2; + buf = (char*)realloc(buf, size); + } + + if(i==r) + r += fread(buf+i, 1, size-i, file); + + if(i==r && i == 0) { + free(buf); + buf = NULL; + r = 0; + return NULL; + } + + if(i==r || buf[i] == '\n') { + buf[i++] = '\0'; + return buf; + } + i++; + } +} + +int main(int argc, char *argv[]) { + FILE *f=fopen(argv[1], "r"); + char *line, *pattern, *module; + char *pos1, *pos2; + + while((line=getline(f))!=NULL) { + if(!strncmp(line, "alias", strlen("alias"))) { + pos1 = index(line, ' '); + pos2 = index(pos1+1, ' '); + pattern = pos1+1; + *pos2 = '\0'; + module = pos2+1; + + if(!fnmatch(pattern, argv[2], 0)) + printf("%s\n", module); + } + } + return 0; +} |