Ejemplo n.º 1
0
  bool MMapIndexInput::open(const char* path, IndexInput*& ret, CLuceneError& error, int32_t __bufferSize )    {

	//Func - Constructor.
	//       Opens the file named path
	//Pre  - path != NULL
	//Post - if the file could not be opened  an exception is thrown.

	  CND_PRECONDITION(path != NULL, "path is NULL");

    Internal* _internal = _CLNEW Internal;

#if defined(_CL_HAVE_FUNCTION_MAPVIEWOFFILE)
	  _internal->mmaphandle = NULL;
	  _internal->fhandle = CreateFileA(path,GENERIC_READ,FILE_SHARE_READ, 0,OPEN_EXISTING,0,0);
	  
	  //Check if a valid fhandle was retrieved
	  if (_internal->fhandle < 0){
		_cl_dword_t err = GetLastError();
        if ( err == ERROR_FILE_NOT_FOUND )
        error.set(CL_ERR_IO, "File does not exist");
        else if ( err == ERROR_ACCESS_DENIED )
        error.set(CL_ERR_IO, "File Access denied");
        else if ( err == ERROR_TOO_MANY_OPEN_FILES )
        error.set(CL_ERR_IO, "Too many open files");
		else
          error.set(CL_ERR_IO, "Could not open file");
	  }

	  _cl_dword_t dummy=0;
	  _internal->_length = GetFileSize(_internal->fhandle, &dummy);

	  if ( _internal->_length > 0 ){
			_internal->mmaphandle = CreateFileMappingA(_internal->fhandle,NULL,PAGE_READONLY,0,0,NULL);
			if ( _internal->mmaphandle != NULL ){
				void* address = MapViewOfFile(_internal->mmaphandle,FILE_MAP_READ,0,0,0);
				if ( address != NULL ){
					_internal->data = (uint8_t*)address;
          ret = _CLNEW MMapIndexInput(_internal);
          return true;
				}
			}
			
			//failure:
			int errnum = GetLastError(); 
			
			CloseHandle(_internal->mmaphandle);
	
			char* lpMsgBuf=strerror(errnum);
			size_t len = strlen(lpMsgBuf)+80;
			char* errstr = _CL_NEWARRAY(char, len); 
			cl_sprintf(errstr, len, "MMapIndexInput::MMapIndexInput failed with error %d: %s", errnum, lpMsgBuf); 
	
	    error.set(CL_ERR_IO, errstr);
			_CLDELETE_CaARRAY(errstr);
	  }
Ejemplo n.º 2
0
void testError ( CuTest *tc )
{
	const char* msg = "test";
	CLuceneError err ( 0,msg,false );
	CLuceneError err2 = err;
	CuAssert ( tc,_T ( "Error did not copy properly" ),err.what() !=err2.what() );
	CuAssert ( tc,_T ( "Error values did not correspond" ),strcmp ( err.what(),err2.what() ) ==0 );

	IndexReader* reader = NULL;
	try
	{
		RAMDirectory dir; _CL_DECREF(& dir);
		reader = IndexReader::open ( &dir,true );
	}
	catch ( CLuceneError& )
	{
		_CLDELETE ( reader );
	}
	catch ( ... )
	{
		_CLDELETE ( reader );
		CuAssert ( tc,_T ( "Error did not catch properly" ),false );
	}
}
Ejemplo n.º 3
0
Soprano::Error::Error Soprano::Index::exceptionToError( CLuceneError& err )
{
    return Error::Error( QString( "CLucene index error: '%1'" ).arg( err.what() ), Error::ErrorUnknown + err.number() );
}