diff options
Diffstat (limited to 'libXdmcp/RA16.c')
-rw-r--r-- | libXdmcp/RA16.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/libXdmcp/RA16.c b/libXdmcp/RA16.c new file mode 100644 index 000000000..0a279a49b --- /dev/null +++ b/libXdmcp/RA16.c @@ -0,0 +1,72 @@ +/* + * $Xorg: RA16.c,v 1.5 2001/02/09 02:03:48 xorgcvs Exp $ + * + * +Copyright 1989, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + * * + * Author: Keith Packard, MIT X Consortium + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif +#include <X11/Xos.h> +#include <X11/X.h> +#include <X11/Xmd.h> +#include <X11/Xdmcp.h> + +int +XdmcpReadARRAY16 (buffer, array) + XdmcpBufferPtr buffer; + ARRAY16Ptr array; +{ + int i; + + if (!XdmcpReadCARD8 (buffer, &array->length)) { + + /* Must set array->data to NULL to guarantee safe call of + * XdmcpDisposeARRAY*(array) (which calls Xfree(array->data)); + * see defect 7329 */ + array->data = NULL; + return FALSE; + } + if (!array->length) + { + array->data = NULL; + return TRUE; + } + array->data = (CARD16 *) Xalloc (array->length * sizeof (CARD16)); + if (!array->data) + return FALSE; + for (i = 0; i < (int)array->length; i++) + { + if (!XdmcpReadCARD16 (buffer, &array->data[i])) + { + Xfree (array->data); + array->data = NULL; + array->length = 0; + return FALSE; + } + } + return TRUE; +} |