static int linuxDevFinal(void) { ELLNODE *cur, *next, *isrcur, *isrnext; osdPCIDevice *curdev=NULL; osdISR *isr; epicsMutexMustLock(pciLock); for(cur=ellFirst(&devices), next=cur ? ellNext(cur) : NULL; cur; cur=next, next=next ? ellNext(next) : NULL ) { curdev=CONTAINER(cur,osdPCIDevice,node); epicsMutexMustLock(curdev->devLock); for(isrcur=ellFirst(&curdev->isrs), isrnext=isrcur ? ellNext(isrcur) : NULL; isrcur; isrcur=isrnext, isrnext=isrnext ? ellNext(isrnext) : NULL ) { isr=CONTAINER(isrcur,osdISR,node); stopIsrThread(isr); ellDelete(&curdev->isrs,cur); free(isr); } close_uio(curdev); epicsMutexUnlock(curdev->devLock); epicsMutexDestroy(curdev->devLock); free(curdev); } epicsMutexUnlock(pciLock); epicsMutexDestroy(pciLock); return 0; }
int main(int argc, char ** argv) { int c, ret = 0; int action = 0; char *ip_str = NULL, *in = NULL, *out = NULL; edns_context_t ctx; FILE *f = NULL; edns_command_register(); #if 1 if (open_uio()) return -1; #endif INIT_EDNS_CTX(ctx); opterr = 0; while ((c = getopt(argc, argv, "hadsf:o:")) != -1) switch (c) { case 'a': ctx.action = ACTION_ADD; break; case 's': ctx.action = ACTION_SEARCH; break; case 'd': ctx.action = ACTION_DEL; break; case 'f': if (optarg) { f = fopen(optarg, "r"); if (f == NULL) { kerror("invalid file %s\n", optarg); goto out; } ctx.input = f; } break; case 'o': if (optarg) { f = fopen(optarg, "a+"); if (f == NULL) { kerror("invalid file %s\n", optarg); goto out; } ctx.output = f; } break; case 'h': printf("%s", help); break; case '?': break; default: ; } if (optind < argc) { size_t str_len = 16 * (argc - optind); char *ip_str; ctx.ip = malloc(str_len); if (!ctx.ip) goto out; while (optind < argc && str_len) { strncat(ctx.ip,argv[optind],str_len); str_len -= strlen(argv[optind]); if (optind != argc) { strncat(ctx.ip, "", str_len); str_len--; } optind++; } } edns_setting(&ctx); out: DESTROY_EDNS_CTX(ctx); #if 1 close_uio(); #endif edns_command_unregister(); return 0; }