util.c (17980) | util.c (18829) |
---|---|
1/* 2 * Copyright (c) 1995 Wolfram Schneider <wosch@FreeBSD.org>. Berlin. 3 * Copyright (c) 1989, 1993 4 * The Regents of the University of California. All rights reserved. 5 * 6 * This code is derived from software contributed to Berkeley by 7 * James A. Woods. 8 * --- 20 unchanged lines hidden (view full) --- 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 31 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 32 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 34 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 35 * SUCH DAMAGE. 36 * | 1/* 2 * Copyright (c) 1995 Wolfram Schneider <wosch@FreeBSD.org>. Berlin. 3 * Copyright (c) 1989, 1993 4 * The Regents of the University of California. All rights reserved. 5 * 6 * This code is derived from software contributed to Berkeley by 7 * James A. Woods. 8 * --- 20 unchanged lines hidden (view full) --- 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 31 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 32 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 34 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 35 * SUCH DAMAGE. 36 * |
37 * $Id: util.c,v 1.2 1996/08/29 22:39:41 wosch Exp wosch $ | 37 * $Id: util.c,v 1.1 1996/08/31 23:14:54 wosch Exp $ |
38 */ 39 40 41#include <stdlib.h> 42#include <string.h> 43#include <err.h> 44#include <sys/param.h> 45#include <stdio.h> --- 105 unchanged lines hidden (view full) --- 151 152char * 153patprep(name) 154 char *name; 155{ 156 register char *endmark, *p, *subp; 157 158 subp = globfree; | 38 */ 39 40 41#include <stdlib.h> 42#include <string.h> 43#include <err.h> 44#include <sys/param.h> 45#include <stdio.h> --- 105 unchanged lines hidden (view full) --- 151 152char * 153patprep(name) 154 char *name; 155{ 156 register char *endmark, *p, *subp; 157 158 subp = globfree; |
159 *subp++ = '\0'; | 159 *subp++ = '\0'; /* set first element to '\0' */ |
160 p = name + strlen(name) - 1; | 160 p = name + strlen(name) - 1; |
161 /* skip trailing metacharacters (and [] ranges) */ | 161 162 /* skip trailing metacharacters */ |
162 for (; p >= name; p--) | 163 for (; p >= name; p--) |
163 if (index("*?", *p) == 0) | 164 if (index(LOCATE_REG, *p) == NULL) |
164 break; | 165 break; |
165 if (p < name) 166 p = name; 167 if (*p == ']') 168 for (p--; p >= name; p--) 169 if (*p == '[') { 170 p--; 171 break; 172 } 173 if (p < name) 174 p = name; 175 /* 176 * if pattern has only metacharacters, check every path (force '/' 177 * search) | 166 167 /* 168 * check if maybe we are in a character class 169 * 170 * 'foo.[ch]' 171 * |----< p |
178 */ | 172 */ |
179 if ((p == name) && index("?*[]", *p) != 0) | 173 if (p >= name && 174 (index(p, '[') != NULL || index(p, ']') != NULL)) { 175 for (p = name; *p != '\0'; p++) 176 if (*p == ']' || *p == '[') 177 break; 178 p--; 179 180 /* 181 * cannot find a non-meta character, give up 182 * '*\*[a-z]' 183 * |-------< p 184 */ 185 if (p >= name && index(LOCATE_REG, *p) != NULL) 186 p = name - 1; 187 } 188 189 if (p < name) 190 /* only meta chars: "???", force '/' search */ |
180 *subp++ = '/'; | 191 *subp++ = '/'; |
192 |
|
181 else { 182 for (endmark = p; p >= name; p--) | 193 else { 194 for (endmark = p; p >= name; p--) |
183 if (index("]*?", *p) != 0) | 195 if (index(LOCATE_REG, *p) != NULL) |
184 break; 185 for (++p; 186 (p <= endmark) && subp < (globfree + sizeof(globfree));) 187 *subp++ = *p++; 188 } 189 *subp = '\0'; 190 return(--subp); 191} --- 76 unchanged lines hidden --- | 196 break; 197 for (++p; 198 (p <= endmark) && subp < (globfree + sizeof(globfree));) 199 *subp++ = *p++; 200 } 201 *subp = '\0'; 202 return(--subp); 203} --- 76 unchanged lines hidden --- |