Exemplo n.º 1
0
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;
}
Exemplo n.º 2
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;
}