"Fossies" - the Fresh Open Source Software Archive 
Member "scanssh-2.1/getnameinfo.c" (31 Mar 2004, 1261 Bytes) of package /linux/privat/old/scanssh-2.1.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "getnameinfo.c" see the
Fossies "Dox" file reference documentation.
1 /*
2 * fake library for ssh
3 *
4 * This file includes getnameinfo().
5 * These funtions are defined in rfc2133.
6 *
7 * But these functions are not implemented correctly. The minimum subset
8 * is implemented for ssh use only. For exapmle, this routine assumes
9 * that ai_family is AF_INET. Don't use it for another purpose.
10 */
11
12 #include <sys/types.h>
13 #include <sys/socket.h>
14 #include <netdb.h>
15
16 #include "config.h"
17
18 int getnameinfo(const struct sockaddr *sa, size_t salen, char *host,
19 size_t hostlen, char *serv, size_t servlen, int flags)
20 {
21 struct sockaddr_in *sin = (struct sockaddr_in *)sa;
22 struct hostent *hp;
23 char tmpserv[16];
24
25 if (serv) {
26 snprintf(tmpserv, sizeof(tmpserv), "%d", ntohs(sin->sin_port));
27 if (strlen(tmpserv) > servlen)
28 return EAI_MEMORY;
29 else
30 strcpy(serv, tmpserv);
31 }
32
33 if (host) {
34 if (flags & NI_NUMERICHOST) {
35 if (strlen(inet_ntoa(sin->sin_addr)) > hostlen)
36 return EAI_MEMORY;
37
38 strcpy(host, inet_ntoa(sin->sin_addr));
39 return 0;
40 } else {
41 hp = gethostbyaddr((char *)&sin->sin_addr,
42 sizeof(struct in_addr), AF_INET);
43 if (hp == NULL)
44 return EAI_NODATA;
45
46 if (strlen(hp->h_name) > hostlen)
47 return EAI_MEMORY;
48
49 strcpy(host, hp->h_name);
50 return 0;
51 }
52 }
53 return 0;
54 }