The Bottom Layer Close Function
     int <close function>(qpstream)
             QP_stream   *qpstream;
     
     Return Value:   QP_SUCCESS
                     QP_ERROR
     

The bottom layer close function performs the specific close operation of a user-defined stream and deallocates the memory space for the stream. It returns QP_ERROR and assigns an appropriate error code to the errno field of QP_stream if an error occurs in the function. In our example, we use QP_free() to deallocate memory space since the memory is allocated by QP_malloc().

     static int
     bin_close(qpstream)
         QP_stream   *qpstream;
         {
             BinStream *stream = CoerceBinStream(qpstream);
             int fd = stream->fd;
     
             if (close(fd) < 0) {
                 qpstream->errno = errno;
                 return QP_ERROR;
             }
             (void) QP_free(qpstream);
             return QP_SUCCESS;
         }