/*------------------------------------------------------------------------- * Function: _lite_PD_rl_alignment * * Purpose: Release a data alignment structure. * * Return: void * * Programmer: Adapted from PACT PDB * Mar 4, 1996 12:57 PM EST * * Modifications: * *------------------------------------------------------------------------- */ void _lite_PD_rl_alignment (data_alignment *align) { if (lite_SC_arrlen(align) > 0) { SFREE(align); } }
/*------------------------------------------------------------------------- * Function: _lite_PD_rl_standard * * Purpose: Release a data standard structure. * * Return: void * * Programmer: Adapted from PACT PDB * Mar 4, 1996 1:01 PM EST * * Modifications: * *------------------------------------------------------------------------- */ void _lite_PD_rl_standard (data_standard *std) { if (lite_SC_arrlen(std) > 0) { SFREE(std->float_format); SFREE(std->float_order); SFREE(std->double_format); SFREE(std->double_order); SFREE(std); } }
/*------------------------------------------------------------------------- * Function: _lite_PD_rl_defstr * * Purpose: Free up the storage associated with a defstr. * * Return: void * * Programmer: Adapted from PACT PDB * Mar 5, 1996 3:18 PM EST * * Modifications: * *------------------------------------------------------------------------- */ void _lite_PD_rl_defstr (defstr *dp) { memdes *desc, *next; int *ord; long *frm; for (desc = dp->members; desc != NULL; desc = next) { next = desc->next; _lite_PD_rl_descriptor(desc); } ord = dp->order; if ((ord != NULL) && (lite_SC_arrlen(ord) > -1)) SFREE(ord); frm = dp->format; if ((frm != NULL) && (lite_SC_arrlen(frm) > -1)) SFREE(dp->format); SFREE(dp->type); SFREE(dp); }
/*------------------------------------------------------------------------- * Function: lite_SC_realloc * * Purpose: Add a layer of control over the C level memory management * system to store the byte length of allocated spaces. A * space EXTRA_WORD_SIZE greater than requested is reallocated. * The length in bytes is written into the first EXTRA_WORD_SIZE * bytes with a 4 bit marker in the high bits and a pointer to * the next byte is returned. * * Return: Success: Ptr to move memory. * * Failure: If the maximum size implied by the * EXTRA_WORD_SIZE-4 is exceeded a NULL * ptr is returned. * * Programmer: Adapted from PACT SCORE * Mar 12, 1996 * * Modifications: * *------------------------------------------------------------------------- */ lite_SC_byte * lite_SC_realloc (lite_SC_byte *p, long nitems, long bytepitem) { long nb, ob, db; unsigned long nbp, obp; mem_header *space, *tmp; mem_descriptor *desc; #ifdef NEED_MEM_TRACE mem_header *prev, *next; #endif if (p == NULL) return(NULL); space = ((mem_header *) p) - 1; desc = &space->block; if (!SCORE_BLOCK_P(desc)) return(NULL); nb = nitems*bytepitem; nbp = nb + Sz; if ((nb <= 0) || (nb > Sz_max)) return(NULL); ob = lite_SC_arrlen(p); db = nb - ob; SAVE_LINKS(desc); tmp = (mem_header *) _SC_prim_alloc((size_t) nbp); obp = ob + Sz; memcpy(tmp, space, MIN(obp, nbp)); _SC_prim_free(space, obp); space = tmp; if (space != NULL) { REASSIGN_BLOCK(space); lite_SC_c_sp_alloc += db; SC_MEM_COUNT; space++; /* * Zero out the new space. */ if ((db > 0) && (_SC_zero_space)) memset(((char *) space + ob), 0, db); } return((lite_SC_byte *) space); }