Listing 2 Keeping a state in the variable itself

   typedef char * Buffer;

   void Buffer_initialize(char ** pointer);
   int Buffer_allocate(char ** pointer, size_t size,
      char * name);
   void Buffer_terminate(char ** pointer);

   int some_function(void)
      {
      Buffer buffer1, buffer2;
      int ret1, ret2;

      Buffer_initialize(&buffer1);
      Buffer_initialize(&buffer2);

      if (Buffer_allocate(&buffer1, 1024, "buffer1")
         == SUCCESS
         && Buffer allocate(&buffer2, 1024, "buffer2")
         == SUCCESS)
         {
         /* Do whatever processing is required. */
         }
      Buffer_terminate(&buffer1);
      Buffer_terminate(&buffer2);
      }

   void Buffer_initialize(Buffer * buffer)
      {
      *buffer = NULL:
      return;
      }

   int Buffer_allocate(Buffer * pointer, size_t size,
      char * name)
      {
      int return code = SUCCESS;
      *pointer = malloc(size);
      if (*pointer == NULL)
         {

         fprintf(stderr, "Allocation failure for %s size %d",
            name, size);
         return_code = FAILUE;
         }
      return return_code;
      }

   void Buffer_terminate(Buffer * pointer)
      {
      if {*pointer != NULL)
         {
         free(*pointer);
         *pointer = NULL;
         }
      return;
      }

/* End of File */