157493Storek /*
2*61818Sbostic  * Copyright (c) 1992, 1993
3*61818Sbostic  *	The Regents of the University of California.  All rights reserved.
457493Storek  *
557493Storek  * This software was developed by the Computer Systems Engineering group
657493Storek  * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
757493Storek  * contributed to Berkeley.
857493Storek  *
957493Storek  * All advertising materials mentioning features or use of this software
1057493Storek  * must display the following acknowledgement:
1157493Storek  *	This product includes software developed by the University of
1257493Storek  *	California, Lawrence Berkeley Laboratories.
1357493Storek  *
1457493Storek  * %sccs.include.redist.c%
1557493Storek  *
16*61818Sbostic  *	@(#)mkswap.c	8.1 (Berkeley) 06/06/93
1757493Storek  */
1857493Storek 
1957493Storek #include <sys/param.h>
2057493Storek #include <errno.h>
2157493Storek #include <stdio.h>
2257493Storek #include <stdlib.h>
2357493Storek #include <string.h>
2457493Storek #include "config.h"
2557493Storek 
2657493Storek static int mkoneswap __P((struct config *));
2757493Storek 
2857493Storek /*
2957493Storek  * Make the various swap*.c files.  Nothing to do for generic swap.
3057493Storek  */
3157493Storek int
mkswap()3257493Storek mkswap()
3357493Storek {
3457493Storek 	register struct config *cf;
3557493Storek 
3657493Storek 	for (cf = allcf; cf != NULL; cf = cf->cf_next)
3757493Storek 		if (cf->cf_root != NULL && mkoneswap(cf))
3857493Storek 			return (1);
3957493Storek 	return (0);
4057493Storek }
4157493Storek 
4257493Storek static int
mkoneswap(cf)4357493Storek mkoneswap(cf)
4457493Storek 	register struct config *cf;
4557493Storek {
4657493Storek 	register struct nvlist *nv;
4757493Storek 	register FILE *fp;
4857493Storek 	register char *fname;
4957493Storek 	char buf[200];
5057493Storek 
5157493Storek 	(void)sprintf(buf, "swap%s.c", cf->cf_name);
5257493Storek 	fname = path(buf);
5357493Storek 	if ((fp = fopen(fname, "w")) == NULL) {
5457493Storek 		(void)fprintf(stderr, "config: cannot write %s: %s\n",
5557493Storek 		    fname, strerror(errno));
5657493Storek 		return (1);
5757493Storek 	}
5857493Storek 	if (fputs("\
5957493Storek #include <sys/param.h>\n\
6057493Storek #include <sys/conf.h>\n\n", fp) < 0)
6157493Storek 		goto wrerror;
6257493Storek 	nv = cf->cf_root;
6357493Storek 	if (fprintf(fp, "dev_t\trootdev = makedev(%d, %d);\t/* %s */\n",
6457493Storek 	    major(nv->nv_int), minor(nv->nv_int), nv->nv_str) < 0)
6557493Storek 		goto wrerror;
6657493Storek 	nv = cf->cf_dump;
6757493Storek 	if (fprintf(fp, "dev_t\tdumpdev = makedev(%d, %d);\t/* %s */\n",
6857493Storek 	    major(nv->nv_int), minor(nv->nv_int), nv->nv_str) < 0)
6957493Storek 		goto wrerror;
7057493Storek 	if (fputs("\nstruct\tswdevt swdevt[] = {\n", fp) < 0)
7157493Storek 		goto wrerror;
7257493Storek 	for (nv = cf->cf_swap; nv != NULL; nv = nv->nv_next)
7357493Storek 		if (fprintf(fp, "\t{ makedev(%d, %d),\t0,\t0 },\t/* %s */\n",
7457493Storek 		    major(nv->nv_int), minor(nv->nv_int), nv->nv_str) < 0)
7557493Storek 			goto wrerror;
7657493Storek 	if (fputs("\t{ NODEV, 0, 0 }\n};\n", fp) < 0)
7757493Storek 		goto wrerror;
7857493Storek 	if (fclose(fp)) {
7957493Storek 		fp = NULL;
8057493Storek 		goto wrerror;
8157493Storek 	}
8257493Storek 	free(fname);
8357493Storek 	return (0);
8457493Storek wrerror:
8557493Storek 	(void)fprintf(stderr, "config: error writing %s: %s\n",
8657493Storek 	    fname, strerror(errno));
8757493Storek 	if (fp != NULL)
8857493Storek 		(void)fclose(fp);
8957493Storek 	/* (void)unlink(fname); */
9057493Storek 	free(fname);
9157493Storek 	return (1);
9257493Storek }
93