xref: /original-bsd/old/np100/npdump.c (revision e1db577d)
1 /*
2  * Copyright (c) 1986 MICOM-Interlan, Inc., Boxborough Mass.
3  * All rights reserved.  The Berkeley software License Agreement
4  * specifies the terms and conditions for redistribution.
5  *
6  */
7 #ifndef lint
8 char copyright[] =
9 "@(#) Copyright (c) 1986 MICOM-Interlan, Inc., Boxborough Mass.\n\
10  All rights reserved.\n";
11 #endif not lint
12 
13 #ifndef lint
14 static char sccsid[] = "@(#)npdump.c	6.2 (Berkeley) 02/20/86";
15 #endif not lint
16 
17 #include <stdio.h>
18 #include <sys/file.h>
19 #include "npcmd.h"
20 #include <sys/ioctl.h>
21 
22 extern int errno;
23 
24 #define IMAGESIZE (1024 * 256)
25 
26 main(argc,argv)
27 int argc;
28 char **argv;
29 {
30 
31 	int	totalread;		/* Total byte count of device reads */
32 	int	ed;			/* Device's file descriptor */
33 	int	fd;			/* Dumpfile device descriptor */
34 	int	nread;			/* Value returned from read() call */
35 	int 	nwritten;		/* Value returned from write() call */
36 	char	*fname;
37 	char	ibuf[1024];
38 	char	*devname = "/dev/np00";
39 
40 
41 	switch (argc) {
42 	case 3:
43 		/* Pathname for device to be dumped */
44 		devname = argv[2];
45 	case 2:
46 		/* Name of the dump file */
47 		fname = argv[1];
48 		break;
49 	default:
50 		printf("usage: npdump dumpfile [device]\n");
51 		exit(1);
52 	}
53 
54 	/* Open the device to be dumped */
55 
56 	if ((ed = open(devname, O_RDWR)) == -1) {
57 		char fullpath[50];
58 		(void) sprintf(fullpath, "/dev/%s", devname);
59 		if ((ed = open(devname,O_RDWR)) == -1) {
60 			fprintf(stderr,
61 				"%s unable to open device %s errno = %d\n",
62 				argv[0], devname, errno);
63 			exit(2);
64 		}
65 	}
66 
67 	/* Open/create the dump file */
68 
69 	if ((fd = open(fname, O_RDWR | O_CREAT)) == -1) {
70 		fprintf(stderr,"%s: unable to open file %s errno = %d\n",
71 		    argv[0], fname, errno);
72 		exit(2);
73 	}
74 
75 
76 	/* Read from the device and write to the dump file */
77 
78 	totalread = 0;
79 
80 	while (totalread < IMAGESIZE) {
81 
82 		if ((nread = read(ed,ibuf,1024)) > 0) {
83 
84 			totalread += nread;
85 
86 			nwritten = write(fd,ibuf,nread);
87 
88 			if (nwritten != nread) {
89 				fprintf(stderr,"Bad write to %s errno = %d\n",
90 			    	argv[2],errno);
91 				exit(7);
92 			}
93 		}
94 
95 		else {
96 			fprintf(stderr,"Bad read from %s errno = %d\n", argv[0],errno);
97 			exit(7);
98 
99 		}
100 	}
101 
102 	close(fd);
103 	close(ed);
104 
105 	exit(0);
106 }
107