=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/plugin/file2.c,v retrieving revision 1.8 retrieving revision 1.11 diff -u -p -r1.8 -r1.11 --- OpenXM/src/kan96xx/plugin/file2.c 2003/11/24 08:16:13 1.8 +++ OpenXM/src/kan96xx/plugin/file2.c 2004/12/16 08:42:14 1.11 @@ -1,8 +1,9 @@ -/*$OpenXM: OpenXM/src/kan96xx/plugin/file2.c,v 1.7 2003/11/23 13:16:30 takayama Exp $ */ +/*$OpenXM: OpenXM/src/kan96xx/plugin/file2.c,v 1.10 2004/02/25 23:14:35 takayama Exp $ */ #include #include #include #include +#include #include "file2.h" /* If you use file2 standalone to output string, @@ -17,9 +18,9 @@ or define FORSTRING #endif #ifdef KXX -#define GC_malloc(n) malloc(n) +#define sGC_malloc(n) malloc(n) #else -void *GC_malloc(int size); +void *sGC_malloc(int size); #endif int WatchStream = 0; /* Note: 1997, 12/6 cf. SS475/kxx/openxxx.tex, SS475/memo1.txt @@ -49,7 +50,7 @@ FILE2 *fp2open(int fd) { if (debug1) { printf("fp2open is called. \n"); } - fp2 = (FILE2 *) GC_malloc(sizeof(FILE2)); + fp2 = (FILE2 *) sGC_malloc(sizeof(FILE2)); if (fd < -1) { fprintf(stderr,"fp2open Invalid file descriptor %d\n",fd); return(NULL); @@ -66,8 +67,8 @@ FILE2 *fp2open(int fd) { fp2->readsize = 0; fp2->writepos = 0; fp2->limit = FILE2BSIZE; - fp2->readBuf = (char *) GC_malloc(FILE2BSIZE); - fp2->writeBuf = (char *) GC_malloc(FILE2BSIZE); + fp2->readBuf = (char *) sGC_malloc(FILE2BSIZE); + fp2->writeBuf = (char *) sGC_malloc(FILE2BSIZE); if ((fp2->readBuf == NULL) || (fp2->writeBuf == NULL)) { fprintf(stderr,"fp2open. No more memory.\n"); return(NULL); @@ -77,9 +78,15 @@ FILE2 *fp2open(int fd) { fp2->mathcapList = NULL; fp2->log_incomming = NULL; fp2->log_outgoing = NULL; + fp2->popened = 0; + fp2->pfp = NULL; return(fp2); } +void fp2setfp(FILE2 *fp2,FILE *fp,int popened) { + fp2->pfp = fp; + fp2->popened = popened; +} int fp2fflush(FILE2 *fp2) { int r; @@ -111,7 +118,12 @@ int fp2fclose(FILE2 *fp2) { fprintf(stderr,"fp2fclose: flush error.\n"); return(-1); } - return(close(fp2->fd)); + if (fp2->pfp != NULL) { + if (fp2->popened) { + return pclose(fp2->pfp); + } else return fclose(fp2->pfp); + } + else return(close(fp2->fd)); } int fp2fputc(int c,FILE2 *fp2) { @@ -224,7 +236,6 @@ int fp2dumpBuffer(FILE2 *fp2) { int fp2clearReadBuf(FILE2 *fp2) { fd_set readfds; struct timeval timeout; - extern int errno; int fd; #define TMP00SIZE 2000 char tmp00[TMP00SIZE]; @@ -329,8 +340,8 @@ static int fp2fputcString(int c,FILE2 *fp2) { return(-1); } newsize = (fp2->limit)*2; - newwrite = (char *)GC_malloc(newsize); - newread = (char *)GC_malloc(newsize); + newwrite = (char *)sGC_malloc(newsize); + newread = (char *)sGC_malloc(newsize); if ((newwrite == NULL) || (newread == NULL)) { fprintf(stderr,"fp2fputcString: No more memory.\n"); return(-1);