Example (_uopen -- Open Heap for Use) (OS/2)

This example creates a fixed-size heap, then uses _uopen to open it. The program then performs operations on the heap, and closes and destroys it.

    #define INCL_DOSMEMMGR                        /* Memory Manager values */
    #include <os2.h>
    #include <bsememf.h>                /* Get flags for memory management */
    #include <stdlib.h>
    #include <stdio.h>
    #include <umalloc.h>

    int main(void)
    {
       void    *initial_block;
       APIRET  rc;
       Heap_t  myheap;
       char    *p;

       /* Call DosAllocMem to get the initial block of memory */
       if (0 != (rc = DosAllocMem(&initial_block, 65536,
                                  PAG_WRITE | PAG_READ | PAG_COMMIT))) {
          printf("DosAllocMem error: %ld\n", rc);
          exit(EXIT_FAILURE);
       }

       /* Create a fixed size heap starting with the block declared earlier */
       if (NULL == (myheap = _ucreate(initial_block, 65536, _BLOCK_CLEAN,
                                      _HEAP_REGULAR, NULL, NULL))) {
          puts("_ucreate failed.");
          exit(EXIT_FAILURE);
       }
       if (0 != _uopen(myheap)) {
          puts("_uopen failed.");
          exit(EXIT_FAILURE);
       }
       p = _umalloc(myheap, 100);
       free(p);
       if (0 != _uclose(myheap)) {
          puts("_uclose failed");
          exit(EXIT_FAILURE);
       }
       if (0 != (rc = DosFreeMem(initial_block))) {
          printf("DosFreeMem error: return code = %ld\n", rc);
          exit(EXIT_FAILURE);
       }
       return 0;
    }