version 1.3, 1996/06/26 05:36:39 |
version 1.4, 1996/09/02 16:04:22 |
|
|
/* $OpenBSD$ */ |
/* $OpenBSD$ */ |
/* $NetBSD: var.c,v 1.12 1995/11/02 23:55:12 christos Exp $ */ |
/* $NetBSD: var.c,v 1.14 1996/08/13 16:42:25 christos Exp $ */ |
|
|
/* |
/* |
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California. |
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California. |
|
|
static Boolean VarSuffix __P((char *, Boolean, Buffer, ClientData)); |
static Boolean VarSuffix __P((char *, Boolean, Buffer, ClientData)); |
static Boolean VarRoot __P((char *, Boolean, Buffer, ClientData)); |
static Boolean VarRoot __P((char *, Boolean, Buffer, ClientData)); |
static Boolean VarMatch __P((char *, Boolean, Buffer, ClientData)); |
static Boolean VarMatch __P((char *, Boolean, Buffer, ClientData)); |
|
#ifdef SYSVVARSUB |
static Boolean VarSYSVMatch __P((char *, Boolean, Buffer, ClientData)); |
static Boolean VarSYSVMatch __P((char *, Boolean, Buffer, ClientData)); |
|
#endif |
static Boolean VarNoMatch __P((char *, Boolean, Buffer, ClientData)); |
static Boolean VarNoMatch __P((char *, Boolean, Buffer, ClientData)); |
static Boolean VarSubstitute __P((char *, Boolean, Buffer, ClientData)); |
static Boolean VarSubstitute __P((char *, Boolean, Buffer, ClientData)); |
static char *VarModify __P((char *, Boolean (*)(char *, Boolean, Buffer, |
static char *VarModify __P((char *, Boolean (*)(char *, Boolean, Buffer, |
|
|
int len; |
int len; |
|
|
v = (Var *) emalloc(sizeof(Var)); |
v = (Var *) emalloc(sizeof(Var)); |
v->name = strdup(name); |
v->name = estrdup(name); |
|
|
len = strlen(env); |
len = strlen(env); |
|
|
|
|
|
|
v = (Var *) emalloc (sizeof (Var)); |
v = (Var *) emalloc (sizeof (Var)); |
|
|
v->name = strdup (name); |
v->name = estrdup (name); |
|
|
len = val ? strlen(val) : 0; |
len = val ? strlen(val) : 0; |
v->val = Buf_Init(len+1); |
v->val = Buf_Init(len+1); |
|
|
return(addSpace); |
return(addSpace); |
} |
} |
|
|
|
#ifdef SYSVVARSUB |
|
|
/*- |
/*- |
*----------------------------------------------------------------------- |
*----------------------------------------------------------------------- |
* VarSYSVMatch -- |
* VarSYSVMatch -- |
|
|
|
|
return(addSpace); |
return(addSpace); |
} |
} |
|
#endif |
|
|
|
|
/*- |
/*- |
|
|
break; |
break; |
} |
} |
/*FALLTHRU*/ |
/*FALLTHRU*/ |
default: { |
#ifdef SUNSHCMD |
|
case 's': |
|
if (tstr[1] == 'h' && (tstr[2] == endc || tstr[2] == ':')) { |
|
char *err; |
|
newStr = Cmd_Exec (str, &err); |
|
if (err) |
|
Error (err, str); |
|
cp = tstr + 2; |
|
termc = *cp; |
|
break; |
|
} |
|
/*FALLTHRU*/ |
|
#endif |
|
default: |
|
{ |
|
#ifdef SYSVVARSUB |
/* |
/* |
* This can either be a bogus modifier or a System-V |
* This can either be a bogus modifier or a System-V |
* substitution command. |
* substitution command. |
|
|
pattern.lhs[pattern.leftLen] = '='; |
pattern.lhs[pattern.leftLen] = '='; |
pattern.rhs[pattern.rightLen] = endc; |
pattern.rhs[pattern.rightLen] = endc; |
termc = endc; |
termc = endc; |
} else { |
} else |
|
#endif |
|
{ |
Error ("Unknown modifier '%c'\n", *tstr); |
Error ("Unknown modifier '%c'\n", *tstr); |
for (cp = tstr+1; |
for (cp = tstr+1; |
*cp != ':' && *cp != endc && *cp != '\0'; |
*cp != ':' && *cp != endc && *cp != '\0'; |