rc_t make_lookup_reader( const KDirectory *dir, const struct index_reader * index, struct lookup_reader ** reader, size_t buf_size, const char * fmt, ... ) { rc_t rc; const struct KFile * f = NULL; va_list args; va_start ( args, fmt ); rc = KDirectoryVOpenFileRead( dir, &f, fmt, args ); if ( rc != 0 ) { char tmp[ 4096 ]; size_t num_writ; rc_t rc1 = string_vprintf( tmp, sizeof tmp, &num_writ, fmt, args ); if ( rc1 != 0 ) ErrMsg( "make_lookup_reader.KDirectoryVOpenFileRead( '?' ) -> %R", rc ); else ErrMsg( "make_lookup_reader.KDirectoryVOpenFileRead( '%s' ) -> %R", tmp, rc ); } else { const struct KFile * temp_file = NULL; rc = KBufFileMakeRead( &temp_file, f, buf_size ); KFileRelease( f ); if ( rc != 0 ) { ErrMsg( "make_lookup_reader.KBufFileMakeRead() -> %R", rc ); } else { lookup_reader * r = calloc( 1, sizeof * r ); if ( r == NULL ) { KFileRelease( temp_file ); rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted ); ErrMsg( "make_lookup_reader.calloc( %d ) -> %R", ( sizeof * r ), rc ); } else { r->f = temp_file; r->index = index; rc = make_SBuffer( &r->buf, 4096 ); if ( rc == 0 ) *reader = r; else release_lookup_reader( r ); } } } va_end ( args ); return rc; }
static rc_t make_lookup_writer_obj( struct lookup_writer ** writer, struct index_writer * idx, struct KFile * f ) { rc_t rc = 0; lookup_writer * w = calloc( 1, sizeof * w ); if ( w == NULL ) { rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted ); ErrMsg( "calloc( %d ) -> %R", ( sizeof * w ), rc ); } else { w -> f = f; w -> idx = idx; rc = make_SBuffer( &w -> buf, 4096 ); if ( rc == 0 ) *writer = w; else release_lookup_writer( w ); } return rc; }
static rc_t init_sorter( struct sorter * sorter, const sorter_params * params ) { rc_t rc = KVectorMake( &sorter->store ); if ( rc != 0 ) ErrMsg( "KVectorMake() -> %R", rc ); else { rc = make_SBuffer( &sorter->buf, 4096 ); if ( rc == 0 ) { sorter->params.dir = params->dir; sorter->params.output_filename = params->output_filename; sorter->params.index_filename = NULL; sorter->params.temp_path = params->temp_path; sorter->params.src = params->src; sorter->params.buf_size = params->buf_size; sorter->params.mem_limit = params->mem_limit; sorter->params.prefix = params->prefix; sorter->bytes_in_store = 0; sorter->sub_file_id = 0; } } return rc; }