[BACK]Return to shell.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / Kan

Diff for /OpenXM/src/kan96xx/Kan/shell.c between version 1.7 and 1.12

version 1.7, 2003/12/04 06:29:21 version 1.12, 2004/10/14 10:08:09
Line 1 
Line 1 
 /* $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));
 }  }

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.12

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>