From owner-freebsd-hackers Mon Mar 27 9:12:39 2000 Delivered-To: freebsd-hackers@freebsd.org Received: from tasogare.imasy.or.jp (tasogare.imasy.or.jp [202.227.24.5]) by hub.freebsd.org (Postfix) with ESMTP id 4F3BE37B679; Mon, 27 Mar 2000 09:12:26 -0800 (PST) (envelope-from iwasaki@jp.FreeBSD.org) Received: from localhost (isdnb05.imasy.or.jp [202.227.24.133]) by tasogare.imasy.or.jp (8.9.3+3.2W/3.7W-tasogare/smtpfeed 1.01) with ESMTP id CAA08158; Tue, 28 Mar 2000 02:12:20 +0900 (JST) (envelope-from iwasaki@jp.FreeBSD.org) Message-Id: <200003271712.CAA08158@tasogare.imasy.or.jp> To: freebsd-mobile@freebsd.org Cc: freebsd-hackers@freebsd.org Subject: Call for review: new pccard.conf scheme X-Mailer: Mew version 1.93 on Emacs 19.34 / Mule 2.3 (SUETSUMUHANA) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Date: Tue, 28 Mar 2000 02:12:20 +0900 From: Mitsuru IWASAKI X-Dispatcher: imput version 980905(IM100) Lines: 220 Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG Hi, I'm working on new pccard.conf scheme, /etc/defaults/pccard.conf and /etc/pccard.conf in the same manner as rc.conf. Attached patch for pccardd(8) contains: 1. improved `include' keyword function for error handling. 2. changed available io, irq, mem pool so that they can be overridden. 3. default config file as /etc/defaults/pccard.conf instead of /etc/pccard.conf. Currently, /etc/pccard.conf.sample is provied as sample configuration file for pccard, most of users modify this file based on his/her laptop environment. However, on every upgrading, they have to merge new sample config into own config file. The pccard configuration can be separated into two parts; Default pccard configuration database for general purpose, and user specific configuration (further, available resource infomation and additional pccard entries). By separating the file into two (/etc/defaults/pccard.conf as default, /etc/pccard.conf as user config), upgrading pccard.conf would be much easier. Yes, just update /etc/defaults/pccard.conf! To test this stuff, apply the patch and compile & install src/usr.sbin/pccard/pccardd, and; # cp src/etc/pccard.conf.sample /etc/defaults/pccard.conf # echo include /etc/pccard.conf >> /etc/defaults/pccard.conf to make sample config to default config file. Then, create your own pccard config, you can change config entries here from default; # vi /etc/pccard.conf # change or add or delete contents or you can also do # rm /etc/pccard.conf Comments? Index: file.c =================================================================== RCS file: /home/ncvs/src/usr.sbin/pccard/pccardd/file.c,v retrieving revision 1.24 diff -u -r1.24 file.c --- file.c 2000/01/26 17:54:00 1.24 +++ file.c 2000/03/27 07:29:01 @@ -37,7 +37,12 @@ static FILE *in; static int includes = 0; -static FILE *files[MAXINCLUDES] = {NULL, }; +static struct { + FILE *filep; + char *filename; + int lineno; +} configfiles[MAXINCLUDES] = {{NULL, NULL, 0}}; + static int pushc, pusht; static int lineno; static char *filename; @@ -114,12 +119,15 @@ die("readfile"); } for (i = 0; i < MAXINCLUDES; i++) { - if (files[i]) { - fclose(files[i]); - files[i] = NULL; + if (configfiles[i].filep) { + fclose(configfiles[i].filep); + configfiles[i].filep = NULL; } } - files[includes = 0] = in; + includes = 0; + configfiles[includes].filep = in; + filename = configfiles[includes].filename = name; + parsefile(); for (cp = cards; cp; cp = cp->next) { if (cp->config == 0) @@ -132,50 +140,54 @@ parsefile(void) { int i; - int irq_init = 0; - int io_init = 0; - struct allocblk *bp; + struct allocblk *bp, *next; char *incl; pushc = 0; lineno = 1; - for (i = 0; i < 16 ; i++) - if (pool_irq[i]) { - irq_init = 1; - break; - } for (;;) switch (keyword(next_tok())) { case KWD_EOF: /* EOF */ return; case KWD_IO: - /* reserved I/O blocks */ + /* override reserved I/O blocks */ + bzero(io_avail, sizeof(io_avail)); + for (bp = pool_ioblks; bp; bp = next) { + next = bp->next; + free(bp); + } + pool_ioblks = NULL; + while ((bp = ioblk_tok(0)) != 0) { - if (!io_init) { - if (bp->size == 0 || bp->addr == 0) { - free(bp); - continue; - } - bit_nset(io_avail, bp->addr, - bp->addr + bp->size - 1); - bp->next = pool_ioblks; - pool_ioblks = bp; + if (bp->size == 0 || bp->addr == 0) { + free(bp); + continue; } + bit_nset(io_avail, bp->addr, + bp->addr + bp->size - 1); + bp->next = pool_ioblks; + pool_ioblks = bp; } - io_init = 1; pusht = 1; break; case KWD_IRQ: - /* reserved irqs */ + /* override reserved irqs */ + bzero(pool_irq, sizeof(pool_irq)); + while ((i = irq_tok(0)) > 0) - if (!irq_init) - pool_irq[i] = 1; - irq_init = 1; + pool_irq[i] = 1; pusht = 1; break; case KWD_MEMORY: - /* reserved memory blocks. */ + /* override reserved memory blocks. */ + bzero(mem_avail, sizeof(mem_avail)); + for (bp = pool_mem; bp; bp = next) { + next = bp->next; + free(bp); + } + pool_mem = NULL; + while ((bp = memblk_tok(0)) != 0) { if (bp->size == 0 || bp->addr == 0) { free(bp); @@ -732,7 +744,9 @@ if (includes) { fclose(in); includes--; - in = files[includes]; + in = configfiles[includes].filep; + filename = configfiles[includes].filename; + lineno = configfiles[includes].lineno; return _next_tok(); /* recursive */ } if (p != buf) { @@ -773,17 +787,29 @@ * Include configuration file */ static void -file_include(char *filename) +file_include(char *incl) { FILE *fp; - includes++; if (includes >= MAXINCLUDES) { error("include nesting overflow"); + pusht = 0; + goto out; } - if (!(fp = fopen(filename, "r"))) { + if (strcmp(incl, filename) == 0) { + error("can't include from the same file"); + pusht = 0; + goto out; + } + if (!(fp = fopen(incl, "r"))) { error("can't open include file"); - includes--; + pusht = 0; + goto out; } - in = files[includes] = fp; + configfiles[includes].lineno = lineno; + includes++; + in = configfiles[includes].filep = fp; + filename = configfiles[includes].filename = incl; +out: + return; } Index: pccardd.c =================================================================== RCS file: /home/ncvs/src/usr.sbin/pccard/pccardd/pccardd.c,v retrieving revision 1.6 diff -u -r1.6 pccardd.c --- pccardd.c 1999/08/28 01:17:37 1.6 +++ pccardd.c 2000/03/27 06:23:56 @@ -37,7 +37,7 @@ #define EXTERN #include "cardd.h" -char *config_file = "/etc/pccard.conf"; +char *config_file = "/etc/defaults/pccard.conf"; /* * mainline code for cardd To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message