Пример #1
0
FCGICache::~FCGICache()
{
	if( _buf )
	{
		delete []_buf;
	}

	if( _file )
	{
		_file->close();
		/*
		* 临时文件 close() 后自动删除
		if(!WINFile::remove(AtoT(_fileName).c_str()))
		{
			TRACE("WINFile::remove() %s failed,%s.\r\n", _fileName.c_str(), get_last_error().c_str());
		}
		*/

		delete _file;
	}
	else
	{
		/*
		* 由于每获得一个临时文件名,系统就将创建一个空文件.
		* 没有使用 _file 只需把这个空文件删除即可.
		*/
		if(!WINFile::remove(AtoT(_fileName).c_str()))
		{
			TRACE("WINFile::remove() %s failed,%s.\r\n", _fileName.c_str(), get_last_error().c_str());
		}
	}
}
Пример #2
0
extern "C" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR /*lpCmdLine*/, int /*nShowCmd*/)
{
   try
   {
      // Start Win32++
      VPApp theApp(hInstance);
      theApp.InitInstance();
      // Run the application
      return theApp.Run();
   }

   // catch all CException types
   catch (const CException &e)
   {
      // Display the exception and quit
      MessageBox(NULL, e.GetText(), AtoT(e.what()), MB_ICONERROR);

      return -1;
   }
}
Пример #3
0
size_t FCGICache::write(const void *buf, size_t len)
{
	size_t wr = 0;

	/* 分配缓冲 */
	if( _buf == NULL && _bufSize > 0 )
	{
		_buf = new byte[_bufSize];
		assert(_buf);
		if( NULL == _buf ) return 0;
		_rpos = 0;
		_wpos = 0;
	}

	/* 如果内存缓冲区内还有空间,则先写入内存 */
	if( _bufSize - _wpos >= len )
	{
		wr = len;
	}
	else
	{
		wr = _bufSize - _wpos;
	}
	if( wr > 0 )
	{
		memcpy(_buf + _wpos, buf, wr);
		_wpos += wr;
	}
	
	/* 剩下的数据写入文件中 */
	if( wr < len )
	{
		if(_file == NULL)
		{
			_file = new WINFile;
			_file->open(AtoT(_fileName).c_str(), WINFile::rw, true);
			assert(_file->isopen());
			_frpos = 0;
			_fwpos = 0;

			if(!_file->isopen())
			{
				delete _file;
				_file = NULL;
				LOGGER_CFATAL(theLogger, _T("无法打开临时文件[%s],错误码[%d].\r\n"), AtoT(_fileName).c_str(), errno);
			}
		}

		if( _file )
		{
			//fseek(_file, _fwpos, SEEK_SET);
			//size_t fwr = fwrite(reinterpret_cast<const byte*>(buf) + wr, 1, len - wr, _file);
			_file->seek(_fwpos, WINFile::s_set);
			size_t fwr = _file->write(reinterpret_cast<const byte*>(buf) + wr, len - wr);
			_fwpos += fwr;
			wr += fwr;
		}
	}

	// 记录总长度
	_size += wr;
	return wr;
}