Fixup fromcvs/togit conversion
[minix-pkgsrc.git] / databases / sdbm / patches / patch-af
blob31ae07f4638eac9fb28980e3ba16472297bb2f26
1 $NetBSD: patch-af,v 1.4 2012/06/23 18:49:28 dholland Exp $
3 - Use standard headers.
4 - Don't provide own getopt on BSD platforms, or on Solaris.
5 - Use <ctype.h> functions correctly.
6 - Avoid signed bitwise operations.
7 - Use the modern regexp library interface.
9 --- dbe.c.orig  2013-04-14 01:29:53.000000000 +0000
10 +++ dbe.c
11 @@ -1,6 +1,12 @@
12 +#include <sys/types.h>
13 +#include <sys/param.h>
15 +#include <regex.h>
16  #include <stdio.h>
17 +#include <stdlib.h>
18 +#include <string.h>
19  #ifndef VMS
20 -#include <sys/file.h>
21 +#include <fcntl.h>
22  #include <ndbm.h>
23  #else
24  #include "file.h"
25 @@ -51,6 +57,7 @@ char *optarg;                        /* Global argumen
26  #define index  strchr
27  #endif
29 +#if !(defined(BSD) && BSD >= 199506) && !defined(__sun)
30  char
31  getopt(argc, argv, optstring)
32  int argc;
33 @@ -128,23 +135,26 @@ char *optstring;
34         }
35         return c;
36  }
37 +#endif
40  void
41  print_datum(db)
42  datum db;
43  {
44 +       unsigned char   *cp;
45         int i;
47         putchar('"');
48         for (i = 0; i < db.dsize; i++) {
49 -               if (isprint(db.dptr[i]))
50 -                       putchar(db.dptr[i]);
51 +               cp = (unsigned char *)db.dptr;
52 +               if (isprint(cp[i]))
53 +                       putchar(cp[i]);
54                 else {
55                         putchar('\\');
56 -                       putchar('0' + ((db.dptr[i] >> 6) & 0x07));
57 -                       putchar('0' + ((db.dptr[i] >> 3) & 0x07));
58 -                       putchar('0' + (db.dptr[i] & 0x07));
59 +                       putchar('0' + ((cp[i] >> 6) & 0x07));
60 +                       putchar('0' + ((cp[i] >> 3) & 0x07));
61 +                       putchar('0' + (cp[i] & 0x07));
62                 }
63         }
64         putchar('"');
65 @@ -171,7 +181,9 @@ char *s;
66                                 *p = '\f';
67                         else if (*s == 't')
68                                 *p = '\t';
69 -                       else if (isdigit(*s) && isdigit(*(s + 1)) && isdigit(*(s + 2))) {
70 +                       else if (isdigit((unsigned char)*s) &&
71 +                                isdigit((unsigned char)*(s + 1)) &&
72 +                                isdigit((unsigned char)*(s + 2))) {
73                                 i = (*s++ - '0') << 6;
74                                 i |= (*s++ - '0') << 3;
75                                 i |= *s - '0';
76 @@ -211,6 +223,8 @@ char **argv;
77         typedef enum {
78                 YOW, FETCH, STORE, DELETE, SCAN, REGEXP
79         } commands;
80 +       regex_t r;
81 +       regmatch_t      matchv[10];
82         char opt;
83         int flags;
84         int giveusage = 0;
85 @@ -333,7 +347,8 @@ char **argv;
86                         fprintf(stderr, "Missing regular expression.\n");
87                         goto db_exit;
88                 }
89 -               if (re_comp(comarg[1])) {
90 +               (void) memset(&r, 0x0, sizeof(r));
91 +               if (regcomp(&r, comarg[1], REG_EXTENDED) != 0) {
92                         fprintf(stderr, "Invalid regular expression\n");
93                         goto db_exit;
94                 }
95 @@ -343,7 +358,7 @@ char **argv;
96                         goto db_exit;
97                 }
98                 while (key.dptr != NULL) {
99 -                       if (re_exec(key2s(key))) {
100 +                       if (regexec(&r, key2s(key), 10, matchv, 0) == 0) {
101                                 content = dbm_fetch(db, key);
102                                 if (dbm_error(db)) {
103                                         fprintf(stderr, "Error when fetching ");
104 @@ -362,6 +377,7 @@ char **argv;
105                         }
106                         key = dbm_nextkey(db);
107                 }
108 +               regfree(&r);
109                 break;
111         case FETCH: