version 1.7, 2003/12/04 06:29:21 |
version 1.12, 2004/10/14 10:08:09 |
|
|
/* $OpenXM: OpenXM/src/kan96xx/Kan/shell.c,v 1.6 2003/12/04 05:29:12 takayama Exp $ */ |
/* $OpenXM: OpenXM/src/kan96xx/Kan/shell.c,v 1.11 2004/02/23 09:03:42 takayama Exp $ */ |
#include <stdio.h> |
#include <stdio.h> |
#include <sys/types.h> |
#include <sys/types.h> |
#include <sys/stat.h> |
#include <sys/stat.h> |
Line 41 static int AfterPt=0; |
|
Line 41 static int AfterPt=0; |
|
static char *AfterDeleteFile[MAXFILES]; |
static char *AfterDeleteFile[MAXFILES]; |
static int AfterD=0; |
static int AfterD=0; |
|
|
static int KeepTmpFiles = 1; |
static int KeepTmpFiles = 0; |
|
|
extern int OX_P_stdin; |
extern int OX_P_stdin; |
extern int OX_P_stdout; |
extern int OX_P_stdout; |
Line 125 static struct object KoxShell_test1(struct object ob) |
|
Line 125 static struct object KoxShell_test1(struct object ob) |
|
rob = testmain(ob); |
rob = testmain(ob); |
}else if (strcmp(cmd,"which")==0) { |
}else if (strcmp(cmd,"which")==0) { |
if (n == 2) { |
if (n == 2) { |
|
pathFinderErrorVerbose(0); |
rob = KoxWhich(getoa(ob,1),KpoInteger(0)); |
rob = KoxWhich(getoa(ob,1),KpoInteger(0)); |
|
pathFinderErrorVerbose(-1); |
}else if (n==3) { |
}else if (n==3) { |
|
pathFinderErrorVerbose(0); |
rob = KoxWhich(getoa(ob,1),getoa(ob,2)); |
rob = KoxWhich(getoa(ob,1),getoa(ob,2)); |
|
pathFinderErrorVerbose(-1); |
}else{ |
}else{ |
errorKan1("%s\n","shell: << which command-name >> or << which command-name path >>"); |
errorKan1("%s\n","shell: << which command-name >> or << which command-name path >>"); |
} |
} |
Line 173 struct object KoxWhich(struct object cmdo,struct objec |
|
Line 177 struct object KoxWhich(struct object cmdo,struct objec |
|
return(rob); |
return(rob); |
} |
} |
|
|
|
static int mysetenv(char *name, char *value, int overwrite); |
|
static int myunsetenv(char *name); |
|
static int mysetenv(char *name, char *value, int overwrite) { |
|
char *s; |
|
char *orig; |
|
s = (char *)getenv(name); |
|
if ((s == NULL) || overwrite) { |
|
s = (char *) mymalloc(strlen(name)+strlen(value)+5); |
|
if (s == 0) { fprintf(stderr,"No more memory.\n"); exit(10); } |
|
strcpy(s,name); |
|
strcat(s,"="); strcat(s,value); |
|
return(putenv(s)); |
|
} |
|
return (0); |
|
} |
|
|
|
/* bug on Solaris. It does not unsetenv. |
|
libc4, libc5, glibc. It does unsetenv. */ |
|
static myunsetenv(char *name) { |
|
return(putenv(name)); |
|
} |
|
|
/* Example. [(export) (PATH) (=) (/usr/new/bin:$PATH)] */ |
/* Example. [(export) (PATH) (=) (/usr/new/bin:$PATH)] */ |
static struct object oxsSetenv(struct object ob) { |
static struct object oxsSetenv(struct object ob) { |
struct object rob; |
struct object rob; |
Line 197 static struct object oxsSetenv(struct object ob) { |
|
Line 223 static struct object oxsSetenv(struct object ob) { |
|
/* printf("%s\n",new); */ |
/* printf("%s\n",new); */ |
new = oxEvalEnvVar(new); |
new = oxEvalEnvVar(new); |
/* printf("%s\n",new); */ |
/* printf("%s\n",new); */ |
r = setenv(envp,new,1); |
r = mysetenv(envp,new,1); |
}else{ |
}else{ |
unsetenv(envp); r = 0; |
myunsetenv(envp); r = 0; |
|
/* bug: On Solaris, unsetenv will not work. */ |
} |
} |
if (r != 0) errorKan1("%s\n","setenv failed."); |
if (r != 0) errorKan1("%s\n","setenv failed."); |
new = (char *) getenv(envp); |
new = (char *) getenv(envp); |
Line 420 int oxsFileToVar(char *v,char *fname) { |
|
Line 447 int oxsFileToVar(char *v,char *fname) { |
|
int limit; |
int limit; |
int c,i; |
int c,i; |
|
|
if (v == NULL) errorKan1("%s\n","oxsFileToVar(), v is NULL."); |
if (v == NULL) { |
|
/* errorKan1("%s\n","oxsFileToVar(), v is NULL."); */ |
|
fprintf(stderr,"oxsFileToVar(), v is NULL."); |
|
return(-1); |
|
} |
limit = 1024; |
limit = 1024; |
fp = fopen(fname,"r"); |
fp = fopen(fname,"r"); |
if (fp == NULL) { |
if (fp == NULL) { |
fprintf(stderr,"Filename=%s\n",fname); |
fprintf(stderr,"Filename=%s\n",fname); |
errorKan1("%s\n","oxsFileToVar(), the file cannot be opened."); |
/* errorKan1("%s\n","oxsFileToVar(), the file cannot be opened."); */ |
|
fprintf(stderr,"oxsFileToVar(), the file cannot be opened."); |
|
return(-1); |
} |
} |
s = (char *)mymalloc(limit); |
s = (char *)mymalloc(limit); |
if (s == NULL) errorKan1("%s\n","No more memory in oxsFileToVar()."); |
if (s == NULL) errorKan1("%s\n","No more memory in oxsFileToVar()."); |
Line 533 static struct object oxsExecuteBlocked(struct object o |
|
Line 566 static struct object oxsExecuteBlocked(struct object o |
|
{ |
{ |
int r,i,n; |
int r,i,n; |
char **argv; |
char **argv; |
|
int errorf; |
|
|
argv = oxsBuildArgv(ob); |
argv = oxsBuildArgv(ob); |
argv = oxsBuildArgvRedirect(argv); |
argv = oxsBuildArgvRedirect(argv); |
Line 545 static struct object oxsExecuteBlocked(struct object o |
|
Line 579 static struct object oxsExecuteBlocked(struct object o |
|
errorKan1("%s\n","ForkExecBlocked failed."); |
errorKan1("%s\n","ForkExecBlocked failed."); |
} |
} |
*/ |
*/ |
|
errorf=0; |
if (AfterPt > 0) { |
if (AfterPt > 0) { |
for (i=0; i< AfterPt; i++) { |
for (i=0; i< AfterPt; i++) { |
oxsFileToVar(AfterSetVar[i],AfterReadFile[i]); |
if (oxsFileToVar(AfterSetVar[i],AfterReadFile[i]) != 0) { |
|
errorf=1; |
|
} |
} |
} |
} |
} |
AfterPt = 0; |
AfterPt = 0; |
Line 560 static struct object oxsExecuteBlocked(struct object o |
|
Line 597 static struct object oxsExecuteBlocked(struct object o |
|
} |
} |
} |
} |
AfterD = 0; |
AfterD = 0; |
|
if (errorf) errorKan1("%s\n","Some errors in oxsFileToVar()."); |
|
|
return(KpoInteger(r)); |
return(KpoInteger(r)); |
} |
} |