cs_byte_local_size- calculates the necessary buffer size for conversion of international character data from a network code set to a local code set
void cs_byte_local_size( rpc_binding_handle_t binding, unsigned32 network_code_set_value, unsigned32 network_buffer_size, idl_cs_convert_t *conversion_type, unsigned32 *local_buffer_size, error_status_t *status);
- Specifies the target binding handle from which to obtain buffer size evaluation information. When called from the client stub, this value is the binding handle of a compatible server returned by the rpc_ns_binding_import_next() or rpc_ns_binding_select() routine.
- The registered hexadecimal integer value that represents the code set used to transmit the character data over the network. In general, the network code set is the code set that the client application's code sets evaluation routine has determined to be compatible for this client and server. When the caller is the client stub, this value is the receiving tag. When the caller is the server stub, this value is the sending tag.
- The size, in units of idl_byte, of the buffer that is allocated for the international character data. For a conformant or conformant varying array, this value is the network value of the size_is variable for the array; that is, the value is the size of the unmarshalled string if no conversion is done.
- A pointer to the enumerated type defined in <dce/idlbase.h> that indicates whether data conversion is necessary and whether or not the existing buffer is sufficient for storing the results of the conversion. The conversion type can be one of the following values:
- No code set conversion is required.
Code set conversion can be performed in the current buffer.
The converted data must be written to a new buffer.
- A pointer to the buffer size that needs to be allocated to contain the converted data, in units of cs_byte. This value is to be used as the local value of the size_is variable for the array, and is nonNULL only if a conformant or conformant varying array is to be unmarshalled. A value of NULL in this argument indicates that a fixed or varying array is to be unmarshalled.
- Returns the status code from this routine. This status code indicates whether the routine completed successfully or, if not, why not.
Possible status codes and their meanings include:
Conversion between code sets not possible.
If this error occurs in the server stub, an exception is raised to the client application.
The cs_byte_local_size() routine calculates the necessary buffer size for the conversion of international character data from a network code set to a local code set when cs_byte has been specified as the local data type. (The cs_byte type is internally equivalent to the idl_byte type.) The routine is one of those used for character and code set interoperability, which permits clients and servers to transfer international character data in a heterogeneous character set and code sets environment.
The routine determines the type of conversion required and calculates the size of the necessary buffer, if a conformant or conformant varying array is to be unmarshalled; the calling stub then allocates a buffer of that size before it calls one of the code set conversion routines.
Applications do not call the cs_byte_local_size() routine directly; client and server stubs can call the routine before they unmarshall any data. When called from a client stub, the routine determines the value of conversion_type from client and server code set tag information stored in the binding handle by a code sets evaluation or tag-setting routine. If the conversion type specified in the handle is idl_cs_new_buffer_convert, the routine sets the conversion_type argument to this value and, if a conformant or conformant varying array is to be unmarshalled, calculates a new buffer size by multiplying the value of network_buffer_size by the maximum number of bytes required to represent the code set specified by network_code_set_value. The routine returns the new buffer size in the local_buffer_size argument. The size is specified in units of cs_byte, which is the local representation used for international character data (and is internally equivalent to the idl_byte data type). For fixed and varying arrays, the routine assumes that network_buffer_size is sufficient to store the converted data.
If the binding handle information specifies idl_cs_convert_in_place or idl_cs_no_convert, the routine assumes that network_buffer_size can store the converted data (or that no conversion is necessary) and returns idl_cs_convert_in_place (or idl_cs_no_convert) in the conversion_type argument. If a conformant or conformant varying array is to be unmarshalled, the routine also returns the value of network_buffer_size in local_buffer_size.
In cases in which the binding handle does not contain the results of character and code sets evaluation, or in which the cs_byte_local_size() routine is being called from the server stub, it determines the value of conversion_type itself using the local code set value and the code set value passed in the network_code_set_value argument, and returns the appropriate conversion_type value. If a conformant or conformant varying array is to be unmarshalled, and the routine finds that a new buffer is required to hold the converted data, it also calculates the size of this new buffer (by multiplying the value of network_buffer_size by the maximum number of bytes required to represent the code set specified in network_code_set_value) and returns the results, in units of cs_byte, in local_buffer_size.
When invoked from the server stub, this routine calls the routines dce_cs_loc_to_rgy() and rpc_rgy_get_max_bytes(). If either of these routines returns an error, the cs_byte_local_size() routine raises an exception to the client application.
Please note that the html version of this specification may contain formatting aberrations. The definitive version is available as an electronic publication on CD-ROM from The Open Group.