Chapter Contents

Previous

Next
hpdestroy

hpdestroy



Destroy Heap


SYNOPSIS
DESCRIPTION
RETURN VALUE
IMPLEMENTATION
EXAMPLE
RELATED FUNCTIONS
SEE ALSO


SYNOPSIS

#include <multheap.h>
void *hpdestroy(_heap_id heapid);


DESCRIPTION

hpdestroy destroys a heap and returns all its memory back to the operating system. Any further use of memory allocated from the heap will be invalid.


RETURN VALUE

hpdestroy returns a code indicating success (0) or failure (-1) of the operation.


IMPLEMENTATION

The control information assocated with the heap is freed. Be sure not to call hpdestroy for a shared heap that may be in use by another task.


EXAMPLE

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <multheap.h>
main()
{
  _heap_attr attr;  
  _heap_id id1;     
  DCB_t *input, *output;
  DECB_t input_DECB, output_DECB;
  char *buf;
  int count = 0;
  int err;

  input = osbdcb(0);
  memcpy(input->DCBDDNAM, "INPUT ", 8);
  if (osbopen(input, "input")) {
    puts("Input open failed.");
    exit(16);
  }
  output = osbdcb(out_exlst);

  /* Copy output file characteristics from input. */
  output->DCBRECFM = input->DCBRECFM;
  output->DCBLRECL = input->DCBLRECL;
  output->DCBBLKSI = input->DCBBLKSI;
  memcpy(output->DCBDDNAM, "OUTPUT ", 8);
  if (osbopen(output, "output")) {
    puts("Output open failed.");
    osbclose(input, "", 1);
    exit(16);
  }

// Get a below the line heap for use in BSAM I/O

  hpattr(&attr);                                      
  attr.amode = HPLOC_BELOW;                           
  attr.flags = HPATTR_SIGOK + HPATTR_NOABEND;         
  attr.initial = 4000;                                
  id1 = hpcreate(&attr, "heap below");                      
  if (!id1) {                                                   
    Log("error in hpcreate.\n");                     
    return -1;                                       
  }                                                   
  buf = hpalloc(id1, input->DCBBLKSI);  

  for (;;) {
    buf = hpalloc(id1, input->DCBBLKSI);           
    osread(input_DECB, input, buf, 0);             
    if ((err = oscheck(input_DECB)) != 0) {        
      if (err != -1) puts("Input error.");         
      break;                                       
    }                                              
    oswrite(output_DECB, output, buf, 0);          
    if (oscheck(output_DECB) != 0) {               
      if (full) puts("Output file full.");         
      else puts("Output error.");                  
      break;
    }
    ++count;
  }
  
  /* Rather than freeing all the records, just free the
  entire heap. */
  
  hpdestroy(id1);
}


RELATED FUNCTIONS

hpcreate, hppoolcreate


SEE ALSO

"Memory Allocation Functions" in Chapter 2, "Function Categories" of the SAS/C Library Reference, Volume 1.


Chapter Contents

Previous

Next

Top of Page

Copyright © 2004 by SAS Institute Inc., Cary, NC, USA. All rights reserved.