]> git.proxmox.com Git - mirror_edk2.git/blame - StdLib/BsdSocketLib/nsap_addr.c
Fix send to properly wait while long transmits are in progress
[mirror_edk2.git] / StdLib / BsdSocketLib / nsap_addr.c
CommitLineData
d7ce7006 1/*\r
2 * Copyright (c) 1996, 1998 by Internet Software Consortium.\r
3 *\r
4 * Permission to use, copy, modify, and distribute this software for any\r
5 * purpose with or without fee is hereby granted, provided that the above\r
6 * copyright notice and this permission notice appear in all copies.\r
7 *\r
8 * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS\r
9 * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES\r
10 * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE\r
11 * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL\r
12 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR\r
13 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS\r
14 * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS\r
15 * SOFTWARE.\r
16 */\r
17\r
18#if defined(LIBC_SCCS) && !defined(lint)\r
19static char rcsid[] = "$Id: nsap_addr.c,v 1.1.1.1 2003/11/19 01:51:31 kyu3 Exp $";\r
20#endif /* LIBC_SCCS and not lint */\r
21\r
22#include <sys/types.h>\r
23#include <sys/param.h>\r
24#include <sys/socket.h>\r
25#include <netinet/in.h>\r
26#include <arpa/inet.h>\r
27#include <arpa/nameser.h>\r
28#include <ctype.h>\r
29#include <resolv.h>\r
30\r
31static char\r
32xtob(\r
33 register int c\r
34 )\r
35{\r
36 return (char)(c - (((c >= '0') && (c <= '9')) ? '0' : '7'));\r
37}\r
38\r
39u_int\r
40inet_nsap_addr(\r
41 const char *ascii,\r
42 u_char *binary,\r
43 int maxlen\r
44 )\r
45{\r
46 u_char c, nib;\r
47 u_int len = 0;\r
48\r
49 while ((c = *ascii++) != '\0' && len < (u_int)maxlen) {\r
50 if (c == '.' || c == '+' || c == '/')\r
51 continue;\r
52 if (!isascii(c))\r
53 return (0);\r
54 if (islower(c))\r
55 c = (u_char)( toupper(c));\r
56 if (isxdigit(c)) {\r
57 nib = xtob(c);\r
58 c = *ascii++;\r
59 if (c != '\0') {\r
60 c = (u_char)( toupper(c));\r
61 if (isxdigit(c)) {\r
62 *binary++ = (nib << 4) | xtob(c);\r
63 len++;\r
64 } else\r
65 return (0);\r
66 }\r
67 else\r
68 return (0);\r
69 }\r
70 else\r
71 return (0);\r
72 }\r
73 return (len);\r
74}\r
75\r
76char *\r
77inet_nsap_ntoa(\r
78 int binlen,\r
79 register const u_char *binary,\r
80 register char *ascii\r
81 )\r
82{\r
83 register int nib;\r
84 int i;\r
85 static char tmpbuf[255*3];\r
86 char *start;\r
87\r
88 if (ascii)\r
89 start = ascii;\r
90 else {\r
91 ascii = tmpbuf;\r
92 start = tmpbuf;\r
93 }\r
94\r
95 if (binlen > 255)\r
96 binlen = 255;\r
97\r
98 for (i = 0; i < binlen; i++) {\r
99 nib = *binary >> 4;\r
100 *ascii++ = (char)( nib + (nib < 10 ? '0' : '7'));\r
101 nib = *binary++ & 0x0f;\r
102 *ascii++ = (char)( nib + (nib < 10 ? '0' : '7'));\r
103 if (((i % 2) == 0 && (i + 1) < binlen))\r
104 *ascii++ = '.';\r
105 }\r
106 *ascii = '\0';\r
107 return (start);\r
108}\r