case 33: fprintf(stderr, "%s already up, initiating redial\n", device);
detach(int now, int parentExitCode, char *device) {    static int pipeArray[2];    char exitCode;    if (now) {	/* execute -- ignore errors in case called more than once */	exitCode = parentExitCode;	write(pipeArray[1], &exitCode, 1);	close(pipeArray[1]);    } else {	/* set up */	int child;	if (pipe(pipeArray)) exit (25);	child = fork();	if (child < 0) exit(26);	if (child) {	    /* parent process */	    close (pipeArray[1]);	    while (read (pipeArray[0], &exitCode, 1) < 0) {		switch (errno) {		    case EINTR: continue;		    default: exit (27); /* this will catch EIO in particular */		}	    }	    switch (exitCode) {	    case 0:		break;	    case 34:		fprintf(stderr, "Failed to activate %s, retrying in the background\n", device);		break;	    default:		fprintf(stderr, "Failed to activate %s\n", device);		break;	    }	    exit(exitCode);	} else {	    /* child process */	    close (pipeArray[0]);	    /* become a daemon */	    close (0);	    close (1);	    close (2);	    setsid();	    setpgid(0, 0);	}    }}