var.c (246223) | var.c (249033) |
---|---|
1/* $NetBSD: var.c,v 1.172 2012/11/15 16:42:26 christos Exp $ */ | 1/* $NetBSD: var.c,v 1.173 2013/02/24 19:43:37 christos Exp $ */ |
2 3/* 4 * Copyright (c) 1988, 1989, 1990, 1993 5 * The Regents of the University of California. All rights reserved. 6 * 7 * This code is derived from software contributed to Berkeley by 8 * Adam de Boor. 9 * --- 54 unchanged lines hidden (view full) --- 64 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 65 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 66 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 67 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 68 * SUCH DAMAGE. 69 */ 70 71#ifndef MAKE_NATIVE | 2 3/* 4 * Copyright (c) 1988, 1989, 1990, 1993 5 * The Regents of the University of California. All rights reserved. 6 * 7 * This code is derived from software contributed to Berkeley by 8 * Adam de Boor. 9 * --- 54 unchanged lines hidden (view full) --- 64 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 65 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 66 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 67 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 68 * SUCH DAMAGE. 69 */ 70 71#ifndef MAKE_NATIVE |
72static char rcsid[] = "$NetBSD: var.c,v 1.172 2012/11/15 16:42:26 christos Exp $"; | 72static char rcsid[] = "$NetBSD: var.c,v 1.173 2013/02/24 19:43:37 christos Exp $"; |
73#else 74#include <sys/cdefs.h> 75#ifndef lint 76#if 0 77static char sccsid[] = "@(#)var.c 8.3 (Berkeley) 3/19/94"; 78#else | 73#else 74#include <sys/cdefs.h> 75#ifndef lint 76#if 0 77static char sccsid[] = "@(#)var.c 8.3 (Berkeley) 3/19/94"; 78#else |
79__RCSID("$NetBSD: var.c,v 1.172 2012/11/15 16:42:26 christos Exp $"); | 79__RCSID("$NetBSD: var.c,v 1.173 2013/02/24 19:43:37 christos Exp $"); |
80#endif 81#endif /* not lint */ 82#endif 83 84/*- 85 * var.c -- 86 * Variable-handling functions 87 * --- 216 unchanged lines hidden (view full) --- 304static Boolean VarSubstitute(GNode *, Var_Parse_State *, 305 char *, Boolean, Buffer *, void *); 306static Boolean VarLoopExpand(GNode *, Var_Parse_State *, 307 char *, Boolean, Buffer *, void *); 308static char *VarGetPattern(GNode *, Var_Parse_State *, 309 int, const char **, int, int *, int *, 310 VarPattern *); 311static char *VarQuote(char *); | 80#endif 81#endif /* not lint */ 82#endif 83 84/*- 85 * var.c -- 86 * Variable-handling functions 87 * --- 216 unchanged lines hidden (view full) --- 304static Boolean VarSubstitute(GNode *, Var_Parse_State *, 305 char *, Boolean, Buffer *, void *); 306static Boolean VarLoopExpand(GNode *, Var_Parse_State *, 307 char *, Boolean, Buffer *, void *); 308static char *VarGetPattern(GNode *, Var_Parse_State *, 309 int, const char **, int, int *, int *, 310 VarPattern *); 311static char *VarQuote(char *); |
312static char *VarChangeCase(char *, int); | |
313static char *VarHash(char *); 314static char *VarModify(GNode *, Var_Parse_State *, 315 const char *, 316 Boolean (*)(GNode *, Var_Parse_State *, char *, Boolean, Buffer *, void *), 317 void *); 318static char *VarOrder(const char *, const char); 319static char *VarUniq(const char *); 320static int VarWordCompare(const void *, const void *); --- 2024 unchanged lines hidden (view full) --- 2345 for (len = 0; len < 8; ++len) { 2346 Buf_AddByte(&buf, hexdigits[h & 15]); 2347 h >>= 4; 2348 } 2349 2350 return Buf_Destroy(&buf, FALSE); 2351} 2352 | 312static char *VarHash(char *); 313static char *VarModify(GNode *, Var_Parse_State *, 314 const char *, 315 Boolean (*)(GNode *, Var_Parse_State *, char *, Boolean, Buffer *, void *), 316 void *); 317static char *VarOrder(const char *, const char); 318static char *VarUniq(const char *); 319static int VarWordCompare(const void *, const void *); --- 2024 unchanged lines hidden (view full) --- 2344 for (len = 0; len < 8; ++len) { 2345 Buf_AddByte(&buf, hexdigits[h & 15]); 2346 h >>= 4; 2347 } 2348 2349 return Buf_Destroy(&buf, FALSE); 2350} 2351 |
2353/*- 2354 *----------------------------------------------------------------------- 2355 * VarChangeCase -- 2356 * Change the string to all uppercase or all lowercase 2357 * 2358 * Input: 2359 * str String to modify 2360 * upper TRUE -> uppercase, else lowercase 2361 * 2362 * Results: 2363 * The string with case changed 2364 * 2365 * Side Effects: 2366 * None. 2367 * 2368 *----------------------------------------------------------------------- 2369 */ | |
2370static char * | 2352static char * |
2371VarChangeCase(char *str, int upper) 2372{ 2373 Buffer buf; 2374 int (*modProc)(int); 2375 2376 modProc = (upper ? toupper : tolower); 2377 Buf_Init(&buf, 0); 2378 for (; *str ; str++) { 2379 Buf_AddByte(&buf, modProc(*str)); 2380 } 2381 return Buf_Destroy(&buf, FALSE); 2382} 2383 2384static char * | |
2385VarStrftime(const char *fmt, int zulu) 2386{ 2387 char buf[BUFSIZ]; 2388 time_t utc; 2389 2390 time(&utc); 2391 if (!*fmt) 2392 fmt = "%c"; --- 659 unchanged lines hidden (view full) --- 3052 * Check for two-character options: 3053 * ":tu", ":tl" 3054 */ 3055 if (tstr[1] == 'A') { /* absolute path */ 3056 newStr = VarModify(ctxt, &parsestate, nstr, 3057 VarRealpath, NULL); 3058 cp = tstr + 2; 3059 termc = *cp; | 2353VarStrftime(const char *fmt, int zulu) 2354{ 2355 char buf[BUFSIZ]; 2356 time_t utc; 2357 2358 time(&utc); 2359 if (!*fmt) 2360 fmt = "%c"; --- 659 unchanged lines hidden (view full) --- 3020 * Check for two-character options: 3021 * ":tu", ":tl" 3022 */ 3023 if (tstr[1] == 'A') { /* absolute path */ 3024 newStr = VarModify(ctxt, &parsestate, nstr, 3025 VarRealpath, NULL); 3026 cp = tstr + 2; 3027 termc = *cp; |
3060 } else if (tstr[1] == 'u' || tstr[1] == 'l') { 3061 newStr = VarChangeCase(nstr, (tstr[1] == 'u')); | 3028 } else if (tstr[1] == 'u') { 3029 char *dp = bmake_strdup(nstr); 3030 for (newStr = dp; *dp; dp++) 3031 *dp = toupper((unsigned char)*dp); |
3062 cp = tstr + 2; 3063 termc = *cp; | 3032 cp = tstr + 2; 3033 termc = *cp; |
3034 } else if (tstr[1] == 'l') { 3035 char *dp = bmake_strdup(nstr); 3036 for (newStr = dp; *dp; dp++) 3037 *dp = tolower((unsigned char)*dp); 3038 cp = tstr + 2; 3039 termc = *cp; |
|
3064 } else if (tstr[1] == 'W' || tstr[1] == 'w') { 3065 parsestate.oneBigWord = (tstr[1] == 'W'); 3066 newStr = nstr; 3067 cp = tstr + 2; 3068 termc = *cp; 3069 } else { 3070 /* Found ":t<unrecognised>:" or 3071 * ":t<unrecognised><endc>". */ --- 1127 unchanged lines hidden --- | 3040 } else if (tstr[1] == 'W' || tstr[1] == 'w') { 3041 parsestate.oneBigWord = (tstr[1] == 'W'); 3042 newStr = nstr; 3043 cp = tstr + 2; 3044 termc = *cp; 3045 } else { 3046 /* Found ":t<unrecognised>:" or 3047 * ":t<unrecognised><endc>". */ --- 1127 unchanged lines hidden --- |