DM_INLINE_STATIC P write_port(P sock, UW eport[1]) { ssize_t n = 0, n_; do { while ((n_ = write(sock, ((B*) eport)+n, sizeof(eport)-n)) == -1) if (errno == EINTR) checkabort(); else return -errno; } while ((n += n_) < sizeof(eport)); return OK; }
int mcd_read_rom (const char *filename, unsigned short parport) { FILE *file; unsigned char buffer[BUFFERSIZE]; int n_bytes = 0, size; time_t starttime; #if (defined __unix__ || defined __BEOS__) && !defined __MSDOS__ init_conio (); if (register_func (deinit_conio) == -1) { fputs ("ERROR: Could not register function with register_func()\n", stderr); exit (1); } #endif parport_print_info (); if ((file = fopen (filename, "wb")) == NULL) { fprintf (stderr, ucon64_msg[OPEN_WRITE_ERROR], filename); exit (1); } read_block (buffer, 1, parport); size = (buffer[0] + 1) * 64 * 1024; printf ("Receive: %d Bytes (%.4f Mb)\n\n", size, (float) size / MBIT); puts ("Press q to abort\n"); starttime = time (NULL); while (n_bytes < size) { read_block (buffer, BUFFERSIZE, parport); fwrite (buffer, 1, BUFFERSIZE, file); n_bytes += BUFFERSIZE; ucon64_gauge (starttime, n_bytes, size); checkabort (2); } fclose (file); return 0; }
DM_INLINE_STATIC P _delsocket(P fd, enum _DelMode delmode) { struct socketstore* next; P retc = OK; pid_t mypid = getpid(); for (next = socketstore_head; next; next = next->next) if (next->fd == fd) { switch (delmode) { case _DelModeForce: break; case _DelModeCleanup: if (fd == DM_STDERR_FILENO) return OK; break; case _DelModeFork: if (! next->type.fork) return OK; break; case _DelModeExec: if (! next->type.exec) return OK; break; case _DelModeResize: if (! next->type.resize) return OK; break; case _DelModeProc: if (! next->type.proc) return OK; break; }; sockprintdebug("close", next); switch (next->type.stdin) { case 0: if ((retc = _opendevnull(fd, O_WRONLY))) return retc; break; case 1: if ((retc = _opendevnull(fd, O_RDONLY))) return retc; break; case -1: while (close(fd)) { if (errno != EINTR) { retc = -errno; break; }; checkabort(); }; break; }; if (next->type.listener) { clearsocket(fd); if (next->info.listener.sigfd != -1) close(next->info.listener.sigfd); if (next->info.listener.recsigfd != -1) close(next->info.listener.recsigfd); if (next->info.listener.trecsigfd != -1) close(next->info.listener.trecsigfd); if (mypid == next->pid) { if (next->redirector != -1) { if (kill(next->redirector, SIGQUIT)) { dm_error_msg(errno, "Unable to kill redirector %li", (long) next->redirector); if (! retc) retc = -errno; } else while (waitpid((pid_t) next->redirector, NULL, 0) == -1) { if (errno == EINTR) { if (abortflag || recvd_quit) break; } else { if (! retc) retc = -errno; break; } } } #if ENABLE_UNIX_SOCKETS if (next->info.listener.unixport >= 0) { struct sockaddr_un name; if (init_unix_sockaddr(&name, next->info.listener.unixport, TRUE)) if (unlink(name.sun_path) && ! retc) retc = -errno; } #endif //ENABLE_UNIX_SOCKETS } } if (! next->next) socketstore_tail = next->last; else next->next->last = next->last; if (! next->last) socketstore_head = next->next; else next->last->next = next->next; free(next); break; } return retc; }