8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-23 03:23:04 +01:00

Cleanup, minimize casts and a bit better error reporting.

This commit is contained in:
robocop 2008-03-10 09:08:12 +00:00
parent 60d9a63cd7
commit 82b4aeb939
8 changed files with 76 additions and 113 deletions

View File

@ -157,7 +157,7 @@ BLK ALLQ_alloc( PLB pool, UCHAR type, int count)
}
BLK ALLQ_extend(BLK * pointer, int size)
BLK ALLQ_extend(BLK* pointer, int size)
{
/**************************************
*
@ -173,8 +173,7 @@ BLK ALLQ_extend(BLK * pointer, int size)
BLK new_blk = (BLK) ALLQ_alloc((PLB) global_pools->vec_object[block->blk_pool_id],
block->blk_type, size);
const int length = MIN(block->blk_length, new_blk->blk_length) - sizeof(blk);
MOVQ_fast((SCHAR*) block + sizeof(blk),
(SCHAR*) new_blk + sizeof(blk), length);
memcpy((SCHAR*) new_blk + sizeof(blk), (SCHAR*) block + sizeof(blk), length);
ALLQ_release((FRB) block);
if (new_blk->blk_type == (SCHAR) type_vec)
@ -188,7 +187,7 @@ BLK ALLQ_extend(BLK * pointer, int size)
}
void ALLQ_fini(void)
void ALLQ_fini()
{
/**************************************
*
@ -217,7 +216,7 @@ void ALLQ_fini(void)
}
void ALLQ_free( SCHAR * memory)
void ALLQ_free(void* memory)
{
/**************************************
*
@ -234,7 +233,7 @@ void ALLQ_free( SCHAR * memory)
}
void ALLQ_init(void)
void ALLQ_init()
{
/**************************************
*
@ -246,9 +245,10 @@ void ALLQ_init(void)
* Initialize the pool system.
*
**************************************/
ISC_STATUS_ARRAY temp_vector;
qli_vec temp_vector[2];
memcpy(temp_vector, 0, sizeof(temp_vector));
global_pools = (qli_vec*) temp_vector;
global_pools = temp_vector;
global_pools->vec_count = 1;
global_pools->vec_object[0] = NULL;
@ -286,7 +286,7 @@ SCHAR *ALLQ_malloc(SLONG size)
}
PLB ALLQ_pool(void)
PLB ALLQ_pool()
{
/**************************************
*

View File

@ -26,11 +26,11 @@
blk* ALLQ_alloc(plb*, UCHAR, int);
blk* ALLQ_extend(blk**, int);
void ALLQ_fini(void);
void ALLQ_free(SCHAR*);
void ALLQ_init(void);
void ALLQ_fini();
void ALLQ_free(void*);
void ALLQ_init();
SCHAR* ALLQ_malloc(SLONG);
plb* ALLQ_pool(void);
plb* ALLQ_pool();
void ALLQ_push(blk*, qli_lls**);
blk* ALLQ_pop(qli_lls**);
void ALLQ_release(frb*);

View File

@ -40,8 +40,8 @@
#include "../jrd/gds_proto.h"
#ifdef DEV_BUILD
static void explain(const UCHAR*);
static void explain_index_tree(SSHORT, const TEXT*, const SCHAR**, SSHORT*);
static void explain(DBB db, const UCHAR*);
static void explain_index_tree(DBB db, SSHORT, const TEXT*, const UCHAR**, SSHORT*);
static void explain_printf(SSHORT, const TEXT*, const TEXT*);
#endif
@ -137,19 +137,19 @@ qli_rlb* GEN_rlb_extend(qli_rlb* rlb)
if (!rlb)
rlb = (qli_rlb*) ALLOCD(type_rlb);
const UCHAR* old_string = rlb->rlb_base;
const ULONG l = rlb->rlb_data - rlb->rlb_base;
UCHAR* const old_string = rlb->rlb_base;
const ULONG len = rlb->rlb_data - rlb->rlb_base;
rlb->rlb_length += RLB_BUFFER_SIZE;
UCHAR* new_string = (UCHAR*) ALLQ_malloc((SLONG) rlb->rlb_length);
if (old_string) {
MOVQ_fast((SCHAR*) old_string, (SCHAR*) new_string, l);
ALLQ_free((SCHAR*) old_string);
memcpy(new_string, old_string, len);
ALLQ_free(old_string);
}
rlb->rlb_base = new_string;
rlb->rlb_data = new_string + l;
rlb->rlb_data = new_string + len;
rlb->rlb_limit = rlb->rlb_data + RLB_BUFFER_SIZE - RLB_SAFETY_MARGIN;
return (rlb);
return rlb;
}
@ -173,7 +173,7 @@ void GEN_rlb_release( qli_rlb* rlb)
return;
if (rlb->rlb_base) {
ALLQ_free((SCHAR*) rlb->rlb_base);
ALLQ_free(rlb->rlb_base);
rlb->rlb_base = NULL;
rlb->rlb_length = 0;
rlb->rlb_data = NULL;
@ -183,7 +183,7 @@ void GEN_rlb_release( qli_rlb* rlb)
#ifdef DEV_BUILD
static void explain(const UCHAR* explain_buffer)
static void explain(DBB db, const UCHAR* explain_buffer)
{
/**************************************
*
@ -249,9 +249,7 @@ static void explain(const UCHAR* explain_buffer)
case isc_info_rsb_indexed:
printf("isc_info_rsb_indexed,\n");
level++;
explain_index_tree(level, relation_name,
reinterpret_cast<const SCHAR**>(&explain_buffer),
&buffer_length);
explain_index_tree(db, level, relation_name, &explain_buffer, &buffer_length);
level--;
break;
@ -271,9 +269,7 @@ static void explain(const UCHAR* explain_buffer)
case isc_info_rsb_navigate:
printf("isc_info_rsb_navigate,\n");
level++;
explain_index_tree(level, relation_name,
reinterpret_cast<const SCHAR**>(&explain_buffer),
&buffer_length);
explain_index_tree(db, level, relation_name, &explain_buffer, &buffer_length);
level--;
break;
@ -354,10 +350,10 @@ static void explain(const UCHAR* explain_buffer)
#ifdef DEV_BUILD
static void explain_index_tree(
static void explain_index_tree(DBB db,
SSHORT level,
const TEXT* relation_name,
const SCHAR** explain_buffer_ptr,
const UCHAR** explain_buffer_ptr,
SSHORT* buffer_length)
{
/**************************************
@ -374,7 +370,7 @@ static void explain_index_tree(
SCHAR index_info[256];
SSHORT length;
const SCHAR* explain_buffer = *explain_buffer_ptr;
const UCHAR* explain_buffer = *explain_buffer_ptr;
(*buffer_length)--;
@ -382,20 +378,16 @@ static void explain_index_tree(
case isc_info_rsb_and:
explain_printf(level, "isc_info_rsb_and,\n", 0);
level++;
explain_index_tree(level, relation_name, &explain_buffer,
buffer_length);
explain_index_tree(level, relation_name, &explain_buffer,
buffer_length);
explain_index_tree(db, level, relation_name, &explain_buffer, buffer_length);
explain_index_tree(db, level, relation_name, &explain_buffer, buffer_length);
level--;
break;
case isc_info_rsb_or:
explain_printf(level, "isc_info_rsb_or,\n", 0);
level++;
explain_index_tree(level, relation_name, &explain_buffer,
buffer_length);
explain_index_tree(level, relation_name, &explain_buffer,
buffer_length);
explain_index_tree(db, level, relation_name, &explain_buffer, buffer_length);
explain_index_tree(db, level, relation_name, &explain_buffer, buffer_length);
level--;
break;
@ -408,13 +400,13 @@ static void explain_index_tree(
(*buffer_length)--;
length = (SSHORT) *explain_buffer++;
strncpy(index_name, explain_buffer, length);
memcpy(index_name, explain_buffer, length);
index_name[length] = 0;
*buffer_length -= length;
explain_buffer += length;
MET_index_info(relation_name, index_name, index_info);
MET_index_info(db, relation_name, index_name, index_info, sizeof(index_info));
printf("%s\n", index_info);
break;
}
@ -602,7 +594,7 @@ static void gen_compile( qli_req* request)
if (QLI_blr)
gds__print_blr(rlb->rlb_base, 0, 0, 0);
const USHORT length = (UCHAR *) rlb->rlb_data - (UCHAR *) rlb->rlb_base;
const USHORT length = rlb->rlb_data - rlb->rlb_base;
DBB dbb = request->req_database;
@ -622,7 +614,7 @@ static void gen_compile( qli_req* request)
sizeof(explain_info), explain_info,
sizeof(explain_buffer), explain_buffer))
{
explain((UCHAR*) explain_buffer);
explain(dbb, (UCHAR*) explain_buffer);
}
#endif

View File

@ -78,6 +78,7 @@ static qli_syntax* parse_blr(UCHAR **, qli_symbol*);
static qli_syntax* parse_blr_blob(ISC_QUAD&, qli_symbol*);
static void purge_relation(qli_rel*);
static void put_dyn_string(qli_rlb*, const TEXT*);
static void release_request(DBB db, FB_API_HANDLE& request_handle);
static void rollback_update(DBB);
static void set_capabilities(DBB);
static DBB setup_update(DBB);
@ -965,9 +966,11 @@ int MET_get_datatype( USHORT blr_datatype)
#ifdef DEV_BUILD
void MET_index_info(const SCHAR* relation_name,
void MET_index_info(DBB db,
const SCHAR* relation_name,
const SCHAR* index_name,
SCHAR* buffer)
SCHAR* const buffer,
size_t bufsize)
{
/**************************************
*
@ -992,15 +995,18 @@ void MET_index_info(const SCHAR* relation_name,
const SCHAR* p;
if (b == buffer) {
// CVC: warning: not dialect 3 aware.
for (p = IDX.RDB$INDEX_NAME; *p && *p != ' ';) {
for (p = fb_utils::exact_name(IDX.RDB$INDEX_NAME); *p;) {
*b++ = *p++;
}
*b++ = ' ';
*b++ = '(';
}
// CVC: warning: not dialect 3 aware.
for (p = SEG.RDB$FIELD_NAME; *p && *p != ' ';) {
p = fb_utils::exact_name(SEG.RDB$FIELD_NAME);
if (p + strlen(p) + 2 > buffer + bufsize)
break;
while (*p) {
*b++ = *p++;
}
@ -1011,11 +1017,9 @@ void MET_index_info(const SCHAR* relation_name,
ERRQ_database_error(NULL, gds_status);
END_ERROR;
if (request_handle)
if (isc_release_request(gds_status, &request_handle))
ERRQ_database_error(NULL, gds_status);
release_request(db, request_handle);
// back up over the last space and finish off
// back up over the last space and finish off
b--;
*b++ = ')';
@ -2249,13 +2253,8 @@ static void clone_fields( qli_rel* target, qli_rel* source)
execute_dynamic_ddl(target->rel_database, rlb);
if (req1)
if (isc_release_request(gds_status, &req1))
ERRQ_database_error(source->rel_database, gds_status);
if (req2)
if (isc_release_request(gds_status, &req2))
ERRQ_database_error(source->rel_database, gds_status);
//return TRUE;
release_request(source->rel_database, req1);
release_request(source->rel_database, req2);
}
@ -2323,7 +2322,7 @@ static void clone_global_fields( qli_rel* target, qli_rel* source)
&& (A.RDB$FIELD_SUB_TYPE != Y.RDB$FIELD_SUB_TYPE)))
{
TEXT* name = (TEXT*) ALLQ_malloc((SLONG) sizeof(Y.RDB$FIELD_NAME));
TEXT* name = ALLQ_malloc((SLONG) sizeof(Y.RDB$FIELD_NAME));
strcpy(name, Y.RDB$FIELD_NAME);
rollback_update(target->rel_database);
// CVC: When is this memory deallocated?
@ -2477,16 +2476,9 @@ static void clone_global_fields( qli_rel* target, qli_rel* source)
execute_dynamic_ddl(target->rel_database, rlb);
}
if (req1)
if (isc_release_request(gds_status, &req1))
ERRQ_database_error(source->rel_database, gds_status);
if (req2)
if (isc_release_request(gds_status, &req2))
ERRQ_database_error(target->rel_database, gds_status);
if (req3)
if (isc_release_request(gds_status, &req3))
ERRQ_database_error(source->rel_database, gds_status);
//return TRUE;
release_request(source->rel_database, req1);
release_request(target->rel_database, req2);
release_request(source->rel_database, req3);
}
@ -2617,7 +2609,7 @@ static void execute_dynamic_ddl( DBB database, qli_rlb* rlb)
* Execute a ddl command, for better or for worse.
*
**************************************/
const USHORT length = (UCHAR *) rlb->rlb_data - (UCHAR *) rlb->rlb_base;
const USHORT length = rlb->rlb_data - rlb->rlb_base;
if (QLI_blr)
PRETTY_print_dyn(rlb->rlb_base, NULL, NULL, 0);
@ -2863,13 +2855,12 @@ static void install( dbb* old_dbb)
ERRQ_database_error(new_dbb, gds_status);
END_ERROR;
if (request)
if (isc_release_request(gds_status, &request))
ERRQ_database_error(new_dbb, gds_status);
release_request(new_dbb, request);
// Pick up functions, if appropriate
// Pick up functions, if appropriate
if (new_dbb->dbb_capabilities & DBB_cap_functions) {
if (new_dbb->dbb_capabilities & DBB_cap_functions)
{
FB_API_HANDLE request2 = 0;
FOR(REQUEST_HANDLE request) X IN DB.RDB$FUNCTIONS
qli_symbol* fsymbol = make_symbol(X.RDB$FUNCTION_NAME, sizeof(X.RDB$FUNCTION_NAME));
@ -2913,12 +2904,8 @@ static void install( dbb* old_dbb)
ON_ERROR
ERRQ_database_error(new_dbb, gds_status);
END_ERROR;
if (request)
if (isc_release_request(gds_status, &request))
ERRQ_database_error(new_dbb, gds_status);
if (request2)
if (isc_release_request(gds_status, &request2))
ERRQ_database_error(new_dbb, gds_status);
release_request(new_dbb, request);
release_request(new_dbb, request2);
}
}
@ -3413,6 +3400,16 @@ static void put_dyn_string( qli_rlb* rlb, const TEXT* string)
}
static void release_request(DBB db, FB_API_HANDLE& request_handle)
{
if (request_handle)
{
if (isc_release_request(gds_status, &request_handle))
ERRQ_database_error(db, gds_status);
}
}
static void rollback_update( DBB database)
{
/**************************************
@ -3472,11 +3469,7 @@ static void set_capabilities( DBB database)
END_ERROR;
}
if (req)
{
if (isc_release_request(gds_status, &req))
ERRQ_database_error(database, gds_status);
}
release_request(database, req);
}

View File

@ -37,7 +37,7 @@ int MET_dimensions(dbb*, const TEXT*);
void MET_fields(qli_rel*);
void MET_finish(dbb*);
int MET_get_datatype (USHORT);
void MET_index_info(const TEXT*, const TEXT*, SCHAR*);
void MET_index_info(DBB db, const TEXT*, const TEXT*, SCHAR* const, size_t bufsize);
void MET_meta_commit(dbb*);
void MET_meta_rollback(dbb*);
FB_API_HANDLE MET_meta_transaction(dbb*, bool);

View File

@ -439,26 +439,6 @@ void MOVQ_double_to_date( double real, SLONG fixed[2])
}
void MOVQ_fast(const SCHAR* from,
SCHAR* to,
ULONG length)
{
/**************************************
*
* M O V Q _ f a s t
*
**************************************
*
* Functional description
* Move a byte string as fast as possible.
*
**************************************/
if (length)
memcpy(to, from, length);
}
double MOVQ_get_double(const dsc* desc)
{
/**************************************

View File

@ -28,7 +28,6 @@ int MOVQ_compare(const dsc*, const dsc*);
double MOVQ_date_to_double(const dsc*);
int MOVQ_decompose (const TEXT*, USHORT, SLONG *);
void MOVQ_double_to_date (double, SLONG [2]);
void MOVQ_fast (const SCHAR*, SCHAR*, ULONG);
double MOVQ_get_double(const dsc*);
SLONG MOVQ_get_long(const dsc*, SSHORT);
int MOVQ_get_string(const dsc*, const TEXT**, vary*, USHORT);

View File

@ -103,8 +103,7 @@ void RPT_report( qli_nod* loop)
report->rpt_buffer = (UCHAR *) string->str_data;
}
MOVQ_fast((SCHAR*) message->msg_buffer, (SCHAR*) report->rpt_buffer,
(SLONG) message->msg_length);
memcpy(report->rpt_buffer, message->msg_buffer, (SLONG) message->msg_length);
qli_brk* control;
if (control = report->rpt_top_rpt)