* Copyright (c) 1980 Regents of the University of California.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* PATCHES MAGIC LEVEL PATCH THAT GOT US HERE
* -------------------- ----- ----------------------
* CURRENT PATCH LEVEL: 1 00096
* -------------------- ----- ----------------------
* 15 Feb 93 Julian Elischer Allow comments (leading #) in device file
static char sccsid
[] = "@(#)mkswapconf.c 5.10 (Berkeley) 7/1/91";
* Build a swap configuration file.
register struct file_list
*fl
;
struct file_list
*do_swap();
if (fl
->f_type
!= SYSTEMSPEC
) {
register struct file_list
*fl
;
register struct file_list
*swap
;
if (eq(fl
->f_fn
, "generic")) {
(void) sprintf(swapname
, "swap%s.c", fl
->f_fn
);
fp
= fopen(path(swapname
), "w");
fprintf(fp
, "#include \"sys/param.h\"\n");
fprintf(fp
, "#include \"sys/conf.h\"\n");
* If there aren't any swap devices
* specified, just return, the error
* has already been noted.
if (swap
== 0 || swap
->f_type
!= SWAPSPEC
) {
(void) unlink(path(swapname
));
fprintf(fp
, "dev_t\trootdev = makedev(%d, %d);\n",
major(fl
->f_rootdev
), minor(fl
->f_rootdev
));
fprintf(fp
, "dev_t\tdumpdev = makedev(%d, %d);\n",
major(fl
->f_dumpdev
), minor(fl
->f_dumpdev
));
fprintf(fp
, "struct\tswdevt swdevt[] = {\n");
fprintf(fp
, "\t{ makedev(%d, %d),\t0,\t%d },\t/* %s */\n",
major(dev
), minor(dev
), swap
->f_swapsize
, swap
->f_fn
);
} while (swap
&& swap
->f_type
== SWAPSPEC
);
fprintf(fp
, "\t{ 0, 0, 0 }\n");
static int devtablenotread
= 1;
static struct devdescription
{
struct devdescription
*dev_next
;
* Given a device name specification figure out:
* This is a hack, but the system still thinks in
* terms of major/minor instead of string names.
nametodev(name
, defunit
, defpartition
)
register struct devdescription
*dp
;
fprintf(stderr
, "config: internal error, nametodev\n");
while (*cp
&& !isdigit(*cp
))
unit
= *cp
? atoi(cp
) : defunit
;
if (unit
< 0 || unit
> 31) {
"config: %s: invalid device specification, unit out of range\n", name
);
unit
= defunit
; /* carry on more checking */
while (*cp
&& isdigit(*cp
))
partition
= *cp
? *cp
: defpartition
;
if (partition
< 'a' || partition
> 'h') {
"config: %c: invalid device specification, bad partition\n", *cp
);
partition
= defpartition
; /* carry on */
for (dp
= devtable
; dp
; dp
= dp
->dev_next
)
if (eq(name
, dp
->dev_name
))
fprintf(stderr
, "config: %s: unknown device\n", name
);
return (makedev(dp
->dev_major
, (unit
<< 3) + (partition
- 'a')));
register struct devdescription
*dp
;
for (dp
= devtable
; dp
; dp
= dp
->dev_next
)
if (major(dev
) == dp
->dev_major
)
(void) sprintf(buf
, "%s%d%c", dp
->dev_name
,
minor(dev
) >> 3, (minor(dev
) & 07) + 'a');
register struct devdescription
**dp
= &devtable
;
(void) sprintf(buf
, "../conf/devices.%s", machinename
);
fprintf(stderr
, "config: can't open %s\n", buf
);
while(fgets(linebuf
,256,fp
))
/*******************************\
\*******************************/
if(linebuf
[0] == '#') continue;
if (sscanf(linebuf
, "%s\t%d\n", buf
, &maj
) == 2)
*dp
= (struct devdescription
*)malloc(sizeof (**dp
));
(*dp
)->dev_name
= ns(buf
);
fprintf(stderr
,"illegal line in devices file\n");