| version 1.7, 2003/11/23 13:16:30 |
version 1.17, 2020/10/06 11:33:47 |
|
|
| /*$OpenXM: OpenXM/src/kan96xx/plugin/file2.c,v 1.6 2003/11/18 11:08:27 takayama Exp $ */ |
/*$OpenXM: OpenXM/src/kan96xx/plugin/file2.c,v 1.16 2016/03/31 03:22:55 takayama Exp $ */ |
| #include <stdio.h> |
#include <stdio.h> |
| |
#include <string.h> |
| #include <sys/time.h> |
#include <sys/time.h> |
| #include <sys/types.h> |
#include <sys/types.h> |
| #include <unistd.h> |
#include <unistd.h> |
| |
#include <signal.h> |
| |
#include <errno.h> |
| |
#include <stdlib.h> |
| #include "file2.h" |
#include "file2.h" |
| |
#include "mysig.h" |
| |
#include "sm1Socket.h" |
| |
|
| /* If you use file2 standalone to output string, |
/* If you use file2 standalone to output string, |
| make the following dummy definition; |
make the following dummy definition; |
| Line 17 or define FORSTRING |
|
| Line 23 or define FORSTRING |
|
| #endif |
#endif |
| |
|
| #ifdef KXX |
#ifdef KXX |
| #define GC_malloc(n) malloc(n) |
#define sGC_malloc(n) malloc(n) |
| #else |
#else |
| void *GC_malloc(int size); |
void *sGC_malloc(int size); |
| #endif |
#endif |
| int WatchStream = 0; |
int WatchStream = 0; |
| /* Note: 1997, 12/6 cf. SS475/kxx/openxxx.tex, SS475/memo1.txt |
/* Note: 1997, 12/6 cf. SS475/kxx/openxxx.tex, SS475/memo1.txt |
| Line 49 FILE2 *fp2open(int fd) { |
|
| Line 55 FILE2 *fp2open(int fd) { |
|
| if (debug1) { |
if (debug1) { |
| printf("fp2open is called. \n"); |
printf("fp2open is called. \n"); |
| } |
} |
| fp2 = (FILE2 *) GC_malloc(sizeof(FILE2)); |
fp2 = (FILE2 *) sGC_malloc(sizeof(FILE2)); |
| if (fd < -1) { |
if (fd < -1) { |
| fprintf(stderr,"fp2open Invalid file descriptor %d\n",fd); |
fprintf(stderr,"fp2open Invalid file descriptor %d\n",fd); |
| return(NULL); |
return(NULL); |
| Line 66 FILE2 *fp2open(int fd) { |
|
| Line 72 FILE2 *fp2open(int fd) { |
|
| fp2->readsize = 0; |
fp2->readsize = 0; |
| fp2->writepos = 0; |
fp2->writepos = 0; |
| fp2->limit = FILE2BSIZE; |
fp2->limit = FILE2BSIZE; |
| fp2->readBuf = (char *) GC_malloc(FILE2BSIZE); |
fp2->readBuf = (char *) sGC_malloc(FILE2BSIZE); |
| fp2->writeBuf = (char *) GC_malloc(FILE2BSIZE); |
fp2->writeBuf = (char *) sGC_malloc(FILE2BSIZE); |
| if ((fp2->readBuf == NULL) || (fp2->writeBuf == NULL)) { |
if ((fp2->readBuf == NULL) || (fp2->writeBuf == NULL)) { |
| fprintf(stderr,"fp2open. No more memory.\n"); |
fprintf(stderr,"fp2open. No more memory.\n"); |
| return(NULL); |
return(NULL); |
| Line 77 FILE2 *fp2open(int fd) { |
|
| Line 83 FILE2 *fp2open(int fd) { |
|
| fp2->mathcapList = NULL; |
fp2->mathcapList = NULL; |
| fp2->log_incomming = NULL; |
fp2->log_incomming = NULL; |
| fp2->log_outgoing = NULL; |
fp2->log_outgoing = NULL; |
| |
fp2->popened = 0; |
| |
fp2->pfp = NULL; |
| return(fp2); |
return(fp2); |
| } |
} |
| |
|
| |
void fp2setfp(FILE2 *fp2,FILE *fp,int popened) { |
| |
fp2->pfp = fp; |
| |
fp2->popened = popened; |
| |
} |
| |
|
| int fp2fflush(FILE2 *fp2) { |
int fp2fflush(FILE2 *fp2) { |
| int r; |
int r; |
| if (debug1) { |
if (debug1) { |
| printf("fp2fflush is called with FILE2 *%x.\n", (int )fp2); |
printf("fp2fflush is called with FILE2 *%lx.\n", (long)fp2); |
| fp2dumpBuffer(fp2); |
fp2dumpBuffer(fp2); |
| printf("--------------------------\n"); |
printf("--------------------------\n"); |
| } |
} |
| if (checkfp2(fp2,"fp2fflush ") == -1) return(-1); |
if (checkfp2(fp2,"fp2fflush ") == -1) return(-1); |
| if (fp2->fd == -1) return(0); |
if (fp2->fd == -1) return(0); |
| if (fp2->writepos > 0) { |
if (fp2->writepos > 0) { |
| |
mysignal(SIGPIPE,SIG_IGN); |
| r = write(fp2->fd,fp2->writeBuf,fp2->writepos); |
r = write(fp2->fd,fp2->writeBuf,fp2->writepos); |
| |
mysignal(SIGPIPE,SIG_DFL); |
| fp2->writepos = 0; |
fp2->writepos = 0; |
| if (r <= 0) { |
if (r <= 0) { |
| fprintf(stderr,"fp2fflush(): write failed on %d.\n",fp2->fd); |
fprintf(stderr,"fp2fflush(): write failed on %d.\n",fp2->fd); |
| |
if (errno == EPIPE) { |
| |
fprintf(stderr,"Your peer is closed --- SIGPIPE. Closing this fp2.\n"); |
| |
fp2fclose(fp2); |
| |
return r; |
| |
} |
| } |
} |
| return(r); |
return(r); |
| }else{ |
}else{ |
| Line 111 int fp2fclose(FILE2 *fp2) { |
|
| Line 130 int fp2fclose(FILE2 *fp2) { |
|
| fprintf(stderr,"fp2fclose: flush error.\n"); |
fprintf(stderr,"fp2fclose: flush error.\n"); |
| return(-1); |
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) { |
int fp2fputc(int c,FILE2 *fp2) { |
| FILE *fp; |
FILE *fp; |
| if (debug1) { |
if (debug1) { |
| printf("fp2fputc is called with %2x, fp2->writepos=%d, ",c,fp2->writepos); |
printf("fp2fputc is called with %2x, fp2->writepos=%d, ",c,fp2->writepos); |
| printf("fp2 = %x.\n",(int) fp2); |
printf("fp2 = %lx.\n",(long) fp2); |
| } |
} |
| if (fp2->watch || WatchStream) { |
if (fp2->watch || WatchStream) { |
| if (fp2->watch) fp = fp2->watchFile; |
if (fp2->watch) fp = fp2->watchFile; |
| Line 224 int fp2dumpBuffer(FILE2 *fp2) { |
|
| Line 248 int fp2dumpBuffer(FILE2 *fp2) { |
|
| int fp2clearReadBuf(FILE2 *fp2) { |
int fp2clearReadBuf(FILE2 *fp2) { |
| fd_set readfds; |
fd_set readfds; |
| struct timeval timeout; |
struct timeval timeout; |
| extern int errno; |
|
| int fd; |
int fd; |
| #define TMP00SIZE 2000 |
#define TMP00SIZE 2000 |
| char tmp00[TMP00SIZE]; |
char tmp00[TMP00SIZE]; |
| Line 265 int fp2clearReadBuf(FILE2 *fp2) { |
|
| Line 288 int fp2clearReadBuf(FILE2 *fp2) { |
|
| int fp2write(FILE2 *os, char *data, int size) { |
int fp2write(FILE2 *os, char *data, int size) { |
| int i,r; |
int i,r; |
| for (i=0; i<size; i++) { |
for (i=0; i<size; i++) { |
| r = fp2fputc(data[i],os); |
r = fp2fputc((unsigned char)(data[i]),os); |
| } |
} |
| return(r); |
return(r); |
| } |
} |
| Line 329 static int fp2fputcString(int c,FILE2 *fp2) { |
|
| Line 352 static int fp2fputcString(int c,FILE2 *fp2) { |
|
| return(-1); |
return(-1); |
| } |
} |
| newsize = (fp2->limit)*2; |
newsize = (fp2->limit)*2; |
| newwrite = (char *)GC_malloc(newsize); |
newwrite = (char *)sGC_malloc(newsize); |
| newread = (char *)GC_malloc(newsize); |
newread = (char *)sGC_malloc(newsize); |
| if ((newwrite == NULL) || (newread == NULL)) { |
if ((newwrite == NULL) || (newread == NULL)) { |
| fprintf(stderr,"fp2fputcString: No more memory.\n"); |
fprintf(stderr,"fp2fputcString: No more memory.\n"); |
| return(-1); |
return(-1); |
| Line 358 char *fp2fcloseInString(FILE2 *fp2, int *sizep) |
|
| Line 381 char *fp2fcloseInString(FILE2 *fp2, int *sizep) |
|
| } |
} |
| } |
} |
| |
|
| |
int fp2fputs(char *s,FILE2 *fp) { |
| |
int i,n; |
| |
n = strlen(s); |
| |
for (i=0; i<n; i++) { |
| |
if (fp2fputc((unsigned char)(s[i]),fp) < 0) return(-1); |
| |
} |
| |
return(0); |
| |
} |
| |
|
| /* Sample program FORSTRING |
/* Sample program FORSTRING |
| FILE2 *fp2; |
FILE2 *fp2; |
| int c; |
int c; |
| Line 375 char *fp2fcloseInString(FILE2 *fp2, int *sizep) |
|
| Line 407 char *fp2fcloseInString(FILE2 *fp2, int *sizep) |
|
| .... |
.... |
| } |
} |
| */ |
*/ |
| |
|