gtpc2mf2 | C/C++ Language Support User's Guide |
This function returns the element pointed to by the cursor in the specified buffer.
Format
#include <c$to2.h> TO2_BUF_PTR TO2_atCursorWithBuffer (const TO2_PID_PTR cursorPidPtr TO2_ENV_PTR env_ptr, const long *bufferLength, void *bufferPtr
Normal Return
The normal return is a pointer (TO2_BUF_PTR) to a structure (buffer) of type TO2_BUF_HDR (see Type Definitions). If the length of the data is greater than the length of the buffer, only the amount of data that will fit is placed in the buffer. The actual length of the data element is returned in the dataL field of the buffer. Check the returned length against the length of the supplied buffer to determine if the entire element has been returned.
Error Return
An error return is indicated by NULL. When NULL is returned, use the TO2_getErrorCode function to determine the specific error code. For more information, see Error Handling.
The following error codes are common for this function:
TO2_ERROR_BUFFER_SIZE
TO2_ERROR_CURSOR
TO2_ERROR_EMPTY
TO2_ERROR_ENV
TO2_ERROR_EODAD
TO2_ERROR_METHOD
TO2_ERROR_PID
TO2_ERROR_ZERO_PID
Programming Considerations
Examples
The following example reads the item that the cursor is currently pointing to and returns it in the supplied buffer.
#include <c$to2.h> /* Needed for TO2 API Functions */ #include <stdio.h> /* APIs for standard I/O functions */ struct person_record { char name[20]; char address[50]; }; typedef struct person_record PERSON_RECORD; TO2_PID cursor; /* Pointer to cursor */ TO2_ENV_PTR env_ptr; /* Pointer to TO2 environment */ TO2_BUF_PTR buffer_ptr; /* Pointer to collection element */ long buffer_length;/* Total length of the buffer area */ PERSON_RECORD *person_ptr; /* Pointer to element data */ TO2_ERR_CODE err_code; /* TO2 error code value */
·
·
·
/**********************************************************************/ /* Read the item that the cursor is currently pointing to */ /* and return it in the supplied buffer. */ /**********************************************************************/ buffer_length = sizeof(TO2_BUF_HDR) + sizeof(PERSON_RECORD); if ((buffer_ptr=malloc(buffer_length)) == NULL) { printf("malloc() failed!\n"); return(0); } if ((buffer_ptr=TO2_atCursorWithBuffer(&cursor, env_ptr, &buffer_length, buffer_ptr)) == NULL) { err_code = TO2_getErrorCode(env_ptr); if (err_code != TO2_ERROR_EODAD) { printf("TO2_atCursorWithBuffer failed!\n"); process_error(env_ptr); } else printf("TO2_atCursor is at the end of the data!\n"); } else { person_ptr = buffer_ptr->data; if (buffer_ptr->dataL < (sizeof(TO2_BUF_HDR) + sizeof(PERSON_RECORD)) printf("Data returned did not fit in allocated buffer!\n"); else printf("TO2_atCursorWithBuffer successful!\n"); }
Related Information