Date: Wed, 10 May 2000 21:08:00 +0900 From: Mitsuru IWASAKI <iwasaki@jp.FreeBSD.org> To: dcs@newsguy.com Cc: imp@freebsd.org, iwasaki@freebsd.org, mobile@freebsd.org Subject: Re: Bug on readcis.c r1.19 Message-ID: <20000510210800Y.iwasaki@jp.FreeBSD.org> In-Reply-To: <200005100540.OAA00517@daniel.sobral> References: <200005100540.OAA00517@daniel.sobral>
next in thread | previous in thread | raw e-mail | index | archive | help
> My pccardd has been core dumping since my last upgrade. I think the
> following change (revision 1.19 or readcis.c) is the responsible:
Yes, CardBus cards make pccardd core dumped as you pointed out.
The following cis_ctrcmp() was supposed to merge replacing strcmp()
but I hesitated about rewriting entries in pccard.conf to use regex.
Index: cardd.c
===================================================================
RCS file: /miserv/home/ncvs/src/usr.sbin/pccard/pccardd/cardd.c,v
retrieving revision 1.51
diff -u -r1.51 cardd.c
--- cardd.c 2000/05/09 22:01:16 1.51
+++ cardd.c 2000/05/10 12:01:54
@@ -206,6 +206,41 @@
pool_irq[sp->irq] = 1;
}
+/* regex CIS string comparison (hosokawa) */
+
+#define REGCOMP_FLAGS (REG_EXTENDED | REG_NOSUB)
+#define REGEXEC_FLAGS (0)
+
+static int
+cis_strcmp(char *db, char *cis)
+{
+ int res, err;
+ char buf[256];
+ regex_t rx;
+ char * p;
+ size_t n;
+
+ if (!db || !cis) {
+ return -1;
+ }
+ n = strlen(db);
+ p = xmalloc(n + 2);
+ strcpy(p + 1, db);
+ *p = '^';
+ db = p;
+ if ((err = regcomp(&rx, p, REGCOMP_FLAGS))) {
+ regerror(err, &rx, buf, sizeof buf);
+ logmsg("Warning: REGEX error for\"%s\" -- %s\n", p, buf);
+ regfree(&rx);
+ free(p);
+ return -1;
+ }
+ res = regexec(&rx, cis, 0, NULL, REGEXEC_FLAGS);
+ regfree(&rx);
+ free(p);
+ return res;
+}
+
/*
* card_inserted - Card has been inserted;
* - Read the CIS
@@ -235,8 +270,8 @@
for (cp = cards; cp; cp = cp->next) {
switch (cp->deftype) {
case DT_VERS:
- if (strcmp(cp->manuf, sp->cis->manuf) == 0 &&
- strcmp(cp->version, sp->cis->vers) == 0) {
+ if (cis_strcmp(cp->manuf, sp->cis->manuf) == 0 &&
+ cis_strcmp(cp->version, sp->cis->vers) == 0) {
logmsg("Card \"%s\"(\"%s\") "
"matched \"%s\" (\"%s\") ",
sp->cis->manuf, sp->cis->vers,
So I'm thinking introduce 'regex' prefix for strings such as
manufacturer, card version, etc. for new entries, like this.
card "SunDisk" "regex:SDP*"
Without 'regex' prefix, we just use strcmp() in cis_strcmp().
Any comments?
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-mobile" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20000510210800Y.iwasaki>
