Beispiel #1
0
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));
}
Beispiel #2
0
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;
    }
}
Beispiel #6
0
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);
}