- row->col_names = (BerVarray)ch_calloc( row->ncols + 1,
- sizeof( struct berval ) );
- row->cols = (char **)ch_calloc( row->ncols + 1,
- sizeof( char * ) );
- row->col_prec = (UDWORD *)ch_calloc( row->ncols,
- sizeof( UDWORD ) );
- row->value_len = (SQLINTEGER *)ch_calloc( row->ncols,
- sizeof( SQLINTEGER ) );
+ row->col_names = (BerVarray)ber_memcalloc_x( row->ncols + 1,
+ sizeof( struct berval ), ctx );
+ if ( !row->col_names ) goto nomem3;
+ row->cols = (char **)ber_memcalloc_x( row->ncols + 1,
+ sizeof( char * ), ctx );
+ if ( !row->cols ) goto nomem2;
+ row->col_prec = (UDWORD *)ber_memcalloc_x( row->ncols,
+ sizeof( UDWORD ), ctx );
+ if ( !row->col_prec ) goto nomem1;
+ row->value_len = (SQLINTEGER *)ber_memcalloc_x( row->ncols,
+ sizeof( SQLINTEGER ), ctx );
+ if ( !row->value_len ) {
+ ber_memfree_x( row->col_prec, ctx );
+ row->col_prec = NULL;
+nomem1: ber_memfree_x( row->cols, ctx );
+ row->cols = NULL;
+nomem2: ber_memfree_x( row->col_names, ctx );
+ row->col_names = NULL;
+nomem3: Debug( LDAP_DEBUG_ANY, "backsql_BindRowAsStrings: "
+ "out of memory\n", 0, 0, 0 );
+ return LDAP_NO_MEMORY;
+ }