int checkscript() { char *prog[2]; struct stat s; int pid, w; if (stat("check", &s) == -1) { if (errno == error_noent) return(1); outs2(WARN); outs2("unable to stat "); outs2(*service); outs2("/check: "); outs2(error_str(errno)); flush2("\n"); return(0); } /* if (!(s.st_mode & S_IXUSR)) return(1); */ if ((pid =fork()) == -1) { outs2(WARN); outs2("unable to fork for "); outs2(*service); outs2("/check: "); outs2(error_str(errno)); flush2("\n"); return(0); } if (!pid) { prog[0] ="./check"; prog[1] =0; close(1); execve("check", prog, environ); outs2(WARN); outs2("unable to run "); outs2(*service); outs2("/check: "); outs2(error_str(errno)); flush2("\n"); _exit(0); } while (wait_pid(&w, pid) == -1) { if (errno == error_intr) continue; outs2(WARN); outs2("unable to wait for child "); outs2(*service); outs2("/check: "); outs2(error_str(errno)); flush2("\n"); return(0); } return(!wait_exitcode(w)); }
void flush(void) { flush1(); flush2(); }
int ChunkOutputStream::write( IOVec& iov, int &headerTotal, const char * pBuf, int size ) { //printf( "****ChunkOutputStream::write()\n" ); int ret, left = size; if (( pBuf == NULL )||( size <= 0 )) return 0; assert( m_pOS != NULL ); assert( m_pIov == &iov ); if ( m_iTotalPending ) { ret = flush2(); switch( ret ) { case 0: left -= m_iLastBufLen; pBuf += m_iLastBufLen; if ( !left ) return size; break; case 1: return 0; default: return ret; } } int chunkSize; do { if ( left + m_iCurSize > MAX_CHUNK_SIZE ) chunkSize = MAX_CHUNK_SIZE - m_iCurSize; else chunkSize = left; if ( headerTotal ) ret = chunkedWrite( iov, headerTotal, pBuf, chunkSize ); else { if ((m_iBuffering)&&( chunkSize + m_iCurSize < CHUNK_BUFSIZE )) { ret = fillChunkBuf( pBuf, chunkSize ); return size; } ret = chunkedWrite( iov, pBuf, chunkSize ); } if ( ret > 0 ) { left -= ret; if ( !left ) return size; pBuf += ret; assert( left > 0 ); } else if ( !ret ) { return size - left; } else return ret; }while( 1 ); }
int ChunkOutputStream::close( IOVec &iov, int total) { if ( m_iCurSize > 0 ) { m_iTotalPending += buildIovec( *m_pIov, NULL, 0 ); } m_iTotalPending += total + 5; m_pIov->append( s_CHUNK_END, 5 ); return flush2(); }
int ChunkOutputStream::chunkedWrite( IOVec &iov, const char * pBuf, int size) { //printf( "****ChunkOutputStream::chunkedWrite()\n" ); m_iTotalPending = buildIovec( iov, pBuf, size ); int ret = flush2(); switch( ret ) { case 0: m_iLastBufLen = 0; return size; case 1: m_pLastBufBegin = pBuf; m_iLastBufLen = size; return 0; default: return ret; } }
unsigned int svstatus_print(char *m) { int pid; int normallyup =0; struct stat s; if (stat("down", &s) == -1) { if (errno != error_noent) { outs2(WARN); outs2("unable to stat "); outs2(*service); outs2("/down: "); outs2(error_str(errno)); flush2("\n"); return(0); } normallyup =1; } pid =(unsigned char) svstatus[15]; pid <<=8; pid +=(unsigned char)svstatus[14]; pid <<=8; pid +=(unsigned char)svstatus[13]; pid <<=8; pid +=(unsigned char)svstatus[12]; tai_unpack(svstatus, &tstatus); switch (svstatus[19]) { case 0: outs(DOWN); break; case 1: outs(RUN); break; case 2: outs(FINISH); break; } outs(m); outs(": "); if (svstatus[19]) { outs("(pid "); sulong[fmt_ulong(sulong, pid)] =0; outs(sulong); outs(") "); } buffer_put(buffer_1, sulong, fmt_ulong(sulong, tnow.sec.x < tstatus.x ? 0 : tnow.sec.x -tstatus.x)); outs("s"); if (pid && !normallyup) outs(", normally down"); if (!pid && normallyup) outs(", normally up"); if (pid && svstatus[16]) outs(", paused"); if (!pid && (svstatus[17] == 'u')) outs(", want up"); if (pid && (svstatus[17] == 'd')) outs(", want down"); if (pid && svstatus[18]) outs(", got TERM"); return(pid ? 1 : 2); }