isc_expand_dpb()

From InterBase
Jump to: navigation, search

Go Up to API Function Reference


Dynamically builds or expands a database parameter buffer (DPB) to include database parameters.

Syntax

void isc_expand_dpb(
char **dpb,
unsigned short *dpb_size,
. . .);

Parameter Type Description

dpb

char **

Pointer to an existing DPB

dpb_size

unsigned short *

Pointer to the current size, in bytes, of the DPB

char *

Pointers to items to insert into the expanded DPB

Description

isc_expand_dpb() builds or expands a DPB dynamically. Its main use is to simplify the building of the DPB prior to a call to isc_attach_database(), or to allow an end user to supply a user name and password combination at run time. In many cases, the DPB must be constructed programmatically, but ­isc_expand_dpb() enables an application to pass user names, password, message file, and character set parameters to the function, which then adds them to an existing DPB.

A pointer to a previously allocated and initialized DPB must be passed to ­isc_expand_dpb() along with a pointer to a variable containing the amount of space used in the DPB when this function is called. The function allocates a new DPB, preserving its current contents, and adds the new parameters.

To ensure proper memory management, applications that call isc_expand_dpb() should call isc_free() to release the allocated buffer.

Example

The following code calls isc_expand_dpb() to create a DPB, then attaches to a database using the newly created DPB. user_name and user_password are assumed to be variables whose values have been filled in, for example, after asking the user to specify the name and password to be used.

#include <ibase.h>
char *dpb;
ISC_STATUS status_vector[20];
isc_db_handle handle = NULL;
short dpb_length;

/* Build the database parameter buffer. */

dpb = (char *) malloc(50);
dpb_length = 0;

isc_expand_dpb(&dpb, &dpb_length, isc_dpb_user_name, user_name, isc_dpb_password, user_password, NULL);

isc_attach_database(status_vector, 0, "employee.db",
 &handle, dpb_length, dpb_buffer);
if (status_vector[0] == 1 && status_vector[1]) {
/* An error occurred. */
isc_print_status(status_vector);
return(1);
}

Return value

None.

See Also