static char *addr2user(const char *addr) { FILE *list; static char buf[128]; const char *domain; int len; domain = strchr(addr, '@'); if (!domain) domain = addr; list = fopen("/var/qmail/users/spam", "r"); if (!list) return NULL; while ((len = better_fgets(buf, sizeof(buf), list))) { char *sep = strchr(buf, ':'); if (buf[0] == '#' || !sep) continue; *sep++ = '\0'; if (cmpaddr(addr, buf)) { fclose(list); if (*sep == '*') { strlcpy(buf, addr, sizeof(buf)); sep = strchr(buf, '@'); if (sep) *sep = '\0'; sep = strchr(buf, '-'); if (sep) *sep = '\0'; return strdup(buf); } return strdup(sep); } } fclose(list); return NULL; }
int main(int argc, char *argv[]) { struct knet_link *head; struct sockaddr_in address; struct timespec bench_start, bench_end; unsigned long long i, bench_diff; head = malloc(sizeof(struct knet_link)); if (head == NULL) { printf("Unable to create knet_link\n"); exit(EXIT_FAILURE); } memset(head, 0, sizeof(struct knet_link)); address.sin_family = AF_INET; address.sin_port = htons(KNET_PORT); address.sin_addr.s_addr = htonl(INADDR_LOOPBACK); memmove(&head->address, &address, sizeof(address)); clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &bench_start); for (i = 0; i < KNET_BENCH_LOOPNUM; i++) { cmpaddr((struct sockaddr_storage *) &address, sizeof(address), (struct sockaddr_storage *) &head->address, sizeof(head->address)); } clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &bench_end); printf("start sec: %3lu, nsec: %9lu\n end sec: %3lu, nsec: %9lu\n", bench_start.tv_sec, bench_start.tv_nsec, bench_end.tv_sec, bench_end.tv_nsec); timespec_diff(bench_start, bench_end, &bench_diff); printf("end - start = %llums\n", bench_diff); return 0; }