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