summaryrefslogtreecommitdiff
path: root/lang/nawk/files/patch-ba
blob: 325fea5fb3cbae2fff3bfffe261422cb977705f0 (plain) (blame)
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
*** b.c.orig	Mon Oct 19 18:42:53 1998
--- b.c	Wed Jan 13 17:46:54 1999
***************
*** 27,32 ****
--- 27,35 ----
  #define	DEBUG
  
  #include <ctype.h>
+ #ifdef	__FreeBSD__
+ #include <limits.h>
+ #endif
  #include <stdio.h>
  #include <string.h>
  #include <stdlib.h>
***************
*** 74,79 ****
--- 77,100 ----
  fa	*fatab[NFA];
  int	nfatab	= 0;	/* entries in fatab */
  
+ #ifdef	__FreeBSD__
+ static int
+ collate_range_cmp(a, b)
+ int a, b;
+ {
+ 	int r;
+ 	static char s[2][2];
+ 
+ 	if ((unsigned char)a == (unsigned char)b)
+ 		return 0;
+ 	s[0][0] = a;
+ 	s[1][0] = b;
+ 	if ((r = strcoll(s[0], s[1])) == 0)
+ 		r = (unsigned char)a - (unsigned char)b;
+ 	return r;
+ }
+ #endif
+ 
  fa *makedfa(char *s, int anchor)	/* returns dfa for reg expr s */
  {
  	int i, use, nuse;
***************
*** 284,289 ****
--- 305,313 ----
  char *cclenter(char *p)	/* add a character class */
  {
  	int i, c, c2;
+ #ifdef	__FreeBSD__
+ 	int c3;
+ #endif
  	char *op, *bp;
  	static char *buf = 0;
  	static int bufsz = 100;
***************
*** 301,306 ****
--- 325,347 ----
  				c2 = *p++;
  				if (c2 == '\\')
  					c2 = quoted(&p);
+ #ifdef	__FreeBSD__
+ 				if (collate_range_cmp(c, c2) > 0) {
+ 					bp--;
+ 					i--;
+ 					continue;
+ 				}
+ 				for (c3 = 0; c3 < (1 << CHAR_BIT) - 1; c3++) {
+ 					if (collate_range_cmp(c, c3) <= 0 &&
+ 					    collate_range_cmp(c3, c2) <= 0) {
+ 						if (!adjbuf(&buf, &bufsz, bp-buf+2, 100, &bp, 0))
+ 							ERROR "out of space for character class [%.10s...] 2", p FATAL;
+ 						*bp++ = c3 + 1;
+ 						i++;
+ 					}
+ 				}
+ #else
+  				if (c > c2) {	/* empty; ignore */					
  				if (c > c2) {	/* empty; ignore */
  					bp--;
  					i--;
***************
*** 312,317 ****
--- 353,359 ----
  					*bp++ = ++c;
  					i++;
  				}
+ #endif
  				continue;
  			}
  		}
*** main.c.orig	Mon Oct 19 18:49:03 1998
--- main.c	Wed Jan 13 17:51:59 1999
***************
*** 27,32 ****
--- 27,33 ----
  #define DEBUG
  #include <stdio.h>
  #include <ctype.h>
+ #include <locale.h>
  #include <stdlib.h>
  #include <string.h>
  #include <signal.h>
***************
*** 55,61 ****
  	char *fs = NULL, *marg;
  	int temp;
  
! 	cmdname = argv[0];
  	if (argc == 1) {
  		fprintf(stderr, "Usage: %s [-f programfile | 'program'] [-Ffieldsep] [-v var=value] [files]\n", cmdname);
  		exit(1);
--- 56,67 ----
  	char *fs = NULL, *marg;
  	int temp;
  
! 	setlocale(LC_ALL, "");
! 
! 	if ((cmdname = strrchr(argv[0], '/')) != NULL)
! 		cmdname++;
! 	else
! 		cmdname = argv[0];
  	if (argc == 1) {
  		fprintf(stderr, "Usage: %s [-f programfile | 'program'] [-Ffieldsep] [-v var=value] [files]\n", cmdname);
  		exit(1);