Esempio n. 1
0
/*-------------------------------------------------------------------------
 * 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);
    }
}
Esempio n. 2
0
/*-------------------------------------------------------------------------
 * 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);
    }
}
Esempio n. 3
0
/*-------------------------------------------------------------------------
 * 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);
}
Esempio n. 4
0
/*-------------------------------------------------------------------------
 * 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);
}