Exemple #1
0
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;
}
Exemple #2
0
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;
}
Exemple #3
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;
}