summaryrefslogtreecommitdiff
path: root/databases/sdbm/patches/patch-af
blob: be192060094627ab04e59f5516b4dc74f53b981d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
$NetBSD: patch-af,v 1.2 2008/08/12 13:11:30 agc Exp $

--- dbe.c.orig	Mon Sep 25 23:28:28 2000
+++ dbe.c
@@ -1,4 +1,10 @@
+#include <sys/types.h>
+#include <sys/param.h>
+
+#include <regex.h>
 #include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
 #ifndef VMS
 #include <sys/file.h>
 #include <ndbm.h>
@@ -51,6 +57,7 @@
 #define index  strchr
 #endif
 
+#if !(defined(BSD) && BSD >= 199506)
 char
 getopt(argc, argv, optstring)
 int argc;
@@ -128,23 +135,26 @@
 	}
 	return c;
 }
+#endif
 
 
 void
 print_datum(db)
 datum db;
 {
+	unsigned char	*cp;
 	int i;
 
 	putchar('"');
 	for (i = 0; i < db.dsize; i++) {
-		if (isprint(db.dptr[i]))
-			putchar(db.dptr[i]);
+		cp = (unsigned char *)db.dptr;
+		if (isprint(cp[i]))
+			putchar(cp[i]);
 		else {
 			putchar('\\');
-			putchar('0' + ((db.dptr[i] >> 6) & 0x07));
-			putchar('0' + ((db.dptr[i] >> 3) & 0x07));
-			putchar('0' + (db.dptr[i] & 0x07));
+			putchar('0' + ((cp[i] >> 6) & 0x07));
+			putchar('0' + ((cp[i] >> 3) & 0x07));
+			putchar('0' + (cp[i] & 0x07));
 		}
 	}
 	putchar('"');
@@ -171,7 +181,9 @@
 				*p = '\f';
 			else if (*s == 't')
 				*p = '\t';
-			else if (isdigit(*s) && isdigit(*(s + 1)) && isdigit(*(s + 2))) {
+			else if (isdigit((unsigned char)*s) &&
+				 isdigit((unsigned char)*(s + 1)) &&
+				 isdigit((unsigned char)*(s + 2))) {
 				i = (*s++ - '0') << 6;
 				i |= (*s++ - '0') << 3;
 				i |= *s - '0';
@@ -211,6 +223,8 @@
 	typedef enum {
 		YOW, FETCH, STORE, DELETE, SCAN, REGEXP
 	} commands;
+	regex_t	r;
+	regmatch_t	matchv[10];
 	char opt;
 	int flags;
 	int giveusage = 0;
@@ -333,7 +347,8 @@
 			fprintf(stderr, "Missing regular expression.\n");
 			goto db_exit;
 		}
-		if (re_comp(comarg[1])) {
+		(void) memset(&r, 0x0, sizeof(r));
+		if (regcomp(&r, comarg[1], REG_EXTENDED) != 0) {
 			fprintf(stderr, "Invalid regular expression\n");
 			goto db_exit;
 		}
@@ -343,7 +358,7 @@
 			goto db_exit;
 		}
 		while (key.dptr != NULL) {
-			if (re_exec(key2s(key))) {
+			if (regexec(&r, key2s(key), 10, matchv, 0) == 0) {
 				content = dbm_fetch(db, key);
 				if (dbm_error(db)) {
 					fprintf(stderr, "Error when fetching ");
@@ -362,6 +377,7 @@
 			}
 			key = dbm_nextkey(db);
 		}
+		regfree(&r);
 		break;
 
 	case FETCH: