mirror of https://github.com/c-ares/c-ares.git
parent
155aadf0b3
commit
af26fa53f3
7 changed files with 154 additions and 29 deletions
@ -0,0 +1,62 @@ |
||||
.\" $Id$ |
||||
.\" |
||||
.\" Copyright 1998 by the Massachusetts Institute of Technology. |
||||
.\" |
||||
.\" Permission to use, copy, modify, and distribute this |
||||
.\" software and its documentation for any purpose and without |
||||
.\" fee is hereby granted, provided that the above copyright |
||||
.\" notice appear in all copies and that both that copyright |
||||
.\" notice and this permission notice appear in supporting |
||||
.\" documentation, and that the name of M.I.T. not be used in |
||||
.\" advertising or publicity pertaining to distribution of the |
||||
.\" software without specific, written prior permission. |
||||
.\" M.I.T. makes no representations about the suitability of |
||||
.\" this software for any purpose. It is provided "as is" |
||||
.\" without express or implied warranty. |
||||
.\" |
||||
.TH ARES_EXPAND_NAME 3 "23 July 1998" |
||||
.SH NAME |
||||
ares_expand_string \- Expand a length encoded string |
||||
.SH SYNOPSIS |
||||
.nf |
||||
.B #include <ares.h> |
||||
.PP |
||||
.B int ares_expand_string(const unsigned char *\fIencoded\fP, |
||||
.B const unsigned char *\fIabuf\fP, int \fIalen\fP, unsigned char **\fIs\fP, |
||||
.B int *\fIenclen\fP) |
||||
.fi |
||||
.SH DESCRIPTION |
||||
The |
||||
.B ares_expand_string |
||||
function converts a length encoded string to a NULL terminated C |
||||
string. The argument |
||||
.I encoded |
||||
gives the beginning of the encoded string, and the arguments |
||||
.I abuf |
||||
and |
||||
.I alen |
||||
give the containing message buffer (necessary for the processing of |
||||
indirection pointers within the encoded domain name). The result is |
||||
placed in a NUL-terminated allocated buffer, a pointer to which is |
||||
stored in the variable pointed to by |
||||
.IR s . |
||||
The length of the encoded string is stored in the variable pointed to by |
||||
.I enclen |
||||
so that the caller can advance past the encoded string to read |
||||
further data in the message. |
||||
.SH RETURN VALUES |
||||
.B ares_expand_string |
||||
can return any of the following values: |
||||
.TP 15 |
||||
.B ARES_SUCCESS |
||||
Expansion of the encoded string succeeded. |
||||
.TP 15 |
||||
.B ARES_EBADSTR |
||||
The encoded string was malformed and could not be expanded. |
||||
.TP 15 |
||||
.B ARES_ENOMEM |
||||
Memory was exhausted. |
||||
.SH SEE ALSO |
||||
.BR ares_free_string (3) |
||||
.SH AUTHOR |
||||
Dominick Meglio |
@ -0,0 +1,65 @@ |
||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||
* |
||||
* Permission to use, copy, modify, and distribute this |
||||
* software and its documentation for any purpose and without |
||||
* fee is hereby granted, provided that the above copyright |
||||
* notice appear in all copies and that both that copyright |
||||
* notice and this permission notice appear in supporting |
||||
* documentation, and that the name of M.I.T. not be used in |
||||
* advertising or publicity pertaining to distribution of the |
||||
* software without specific, written prior permission. |
||||
* M.I.T. makes no representations about the suitability of |
||||
* this software for any purpose. It is provided "as is" |
||||
* without express or implied warranty. |
||||
*/ |
||||
|
||||
#include <sys/types.h> |
||||
|
||||
#ifdef WIN32 |
||||
#include "nameser.h" |
||||
#else |
||||
#include <netinet/in.h> |
||||
#include <arpa/nameser.h> |
||||
#endif |
||||
|
||||
#include <string.h> |
||||
#include <stdlib.h> |
||||
#include "ares.h" |
||||
#include "ares_private.h" /* for the memdebug */ |
||||
|
||||
/* Simply decodes a length-encoded character string. The first byte of the
|
||||
* input is the length of the string to be returned and the bytes thereafter |
||||
* are the characters of the string. The returned result will be NULL |
||||
* terminated. |
||||
*/ |
||||
int ares_expand_string(const unsigned char *encoded, |
||||
const unsigned char *abuf, |
||||
int alen, |
||||
unsigned char **s, |
||||
long *enclen) |
||||
{ |
||||
unsigned char *q; |
||||
long len; |
||||
if (encoded == abuf+alen) |
||||
return ARES_EBADSTR; |
||||
|
||||
len = *encoded; |
||||
if (encoded+len+1 > abuf+alen) |
||||
return ARES_EBADSTR; |
||||
|
||||
encoded++; |
||||
|
||||
*s = malloc(len+1); |
||||
if (*s == NULL) |
||||
return ARES_ENOMEM; |
||||
q = *s;
|
||||
strncpy((char *)q, (char *)encoded, len); |
||||
q[len] = '\0'; |
||||
|
||||
*s = q; |
||||
|
||||
*enclen = len+1;
|
||||
|
||||
return ARES_SUCCESS; |
||||
} |
||||
|
Loading…
Reference in new issue