imeth char * BufferedTempFile_im_gGets(object self, char *buf, int sz) { BufferedTempFile_iv_t *iv = GetIVs(BufferedTempFile, self); char *tmpBuffer; if (iv->iTmpFile) return gGets(iv->iTmpFile, buf, sz); else { tmpBuffer = strstr(iv->iBuffer + iv->iCurrentOffset, "\n"); if (tmpBuffer == NULL) { gRead(self, buf, sz - 1); buf[sz - 1] = 0x00; } else if (tmpBuffer - iv->iBuffer + iv->iCurrentOffset <= sz - 1) { gRead(self, buf, tmpBuffer - iv->iBuffer + iv->iCurrentOffset + 1); buf[tmpBuffer - iv->iBuffer + iv->iCurrentOffset] = 0x00; } else { gRead(self, buf, sz - 1); buf[sz - 1] = 0x00; } return buf; } }
char * gRecvArr( int *num ) { char *arr; gDebug( "Receiving array from %s ...\n", who ); gRead( num, sizeof(*num) ); gDebug( " -> %d bytes\n", *num ); if (!*num) return (char *)0; if (!(arr = malloc( *num ))) logPanic( "No memory for read buffer\n" ); gRead( arr, *num ); gDebug( " -> %02[*hhx\n", *num, arr ); return arr; }
static char * igRecvArr( int *rlen ) { int len; char *buf; gRead( &len, sizeof(len) ); *rlen = len; gDebug( " -> %d bytes\n", len ); if (!len) return (char *)0; if (!(buf = malloc( len ))) logPanic( "No memory for read buffer\n" ); gRead( buf, len ); return buf; }
int gRecvInt() { int val; gDebug( "Receiving int from %s ...\n", who ); gRead( &val, sizeof(val) ); gDebug( " -> %d (%#x)\n", val, val ); return val; }
imeth int BufferedTempFile_im_gRead(object self, char *buf, unsigned n) { BufferedTempFile_iv_t *iv = GetIVs(BufferedTempFile, self); int bytesRead = min(n, iv->iBufSize - iv->iCurrentOffset); if (iv->iTmpFile) return gRead(iv->iTmpFile, buf, n); else { memcpy(buf, iv->iBuffer + iv->iCurrentOffset, bytesRead); iv->iCurrentOffset += bytesRead; return bytesRead; } }