在linux2.6内核中为什么找不到地址转换函数inet_pton的实现?在很多FreeBSD的内核中却能够找到?

pengfoo 2012-03-22 07:43:23
在linux2.6内核中为什么找不到inet_pton的实现?在很多FreeBSD的内核中却能够找到?
真的很疑惑,不知道这个inet_pton到底是在linux2.6内核的什么地方呢?不可能找不到的呀?FreeBSD的很多内核里却能找到。实现如下:

#if defined(LIBC_SCCS) && !defined(lint)
19 static const char rcsid[] = "$Id: inet_pton.c,v 1.3.18.2 2005/07/28 07:38:07 marka Exp $";
20 #endif /* LIBC_SCCS and not lint */
21 #include <sys/cdefs.h>
22 __FBSDID("$FreeBSD: head/sys/libkern/inet_pton.c 213103 2010-09-24 15:01:45Z attilio $");
23
24 #include <sys/param.h>
25 #include <sys/socket.h>
26 #include <sys/systm.h>
27
28 #include <netinet/in.h>
29
30 #if __FreeBSD_version < 700000
31 #define strchr index
32 #endif
33
34 /*%
35 * WARNING: Don't even consider trying to compile this on a system where
36 * sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX.
37 */
38
39 static int inet_pton4(const char *src, u_char *dst);
40 static int inet_pton6(const char *src, u_char *dst);
41
42 /* int
43 * inet_pton(af, src, dst)
44 * convert from presentation format (which usually means ASCII printable)
45 * to network format (which is usually some kind of binary format).
46 * return:
47 * 1 if the address was valid for the specified address family
48 * 0 if the address wasn't valid (`dst' is untouched in this case)
49 * -1 if some other error occurred (`dst' is untouched in this case, too)
50 * author:
51 * Paul Vixie, 1996.
52 */
53 int
54 inet_pton(int af, const char *src, void *dst)
55 {
56 switch (af) {
57 case AF_INET:
58 return (inet_pton4(src, dst));
59 case AF_INET6:
60 return (inet_pton6(src, dst));
61 default:
62 return (-1);
63 }
64 /* NOTREACHED */
65 }
66
67 /* int
68 * inet_pton4(src, dst)
69 * like inet_aton() but without all the hexadecimal and shorthand.
70 * return:
71 * 1 if `src' is a valid dotted quad, else 0.
72 * notice:
73 * does not touch `dst' unless it's returning 1.
74 * author:
75 * Paul Vixie, 1996.
76 */
77 static int
78 inet_pton4(const char *src, u_char *dst)
79 {
80 static const char digits[] = "0123456789";
81 int saw_digit, octets, ch;
82 #define NS_INADDRSZ 4
83 u_char tmp[NS_INADDRSZ], *tp;
84
85 saw_digit = 0;
86 octets = 0;
87 *(tp = tmp) = 0;
88 while ((ch = *src++) != '\0') {
89 const char *pch;
90
91 if ((pch = strchr(digits, ch)) != NULL) {
92 u_int new = *tp * 10 + (pch - digits);
93
94 if (saw_digit && *tp == 0)
95 return (0);
96 if (new > 255)
97 return (0);
98 *tp = new;
99 if (!saw_digit) {
100 if (++octets > 4)
101 return (0);
102 saw_digit = 1;
103 }
104 } else if (ch == '.' && saw_digit) {
105 if (octets == 4)
106 return (0);
107 *++tp = 0;
108 saw_digit = 0;
109 } else
110 return (0);
111 }
112 if (octets < 4)
113 return (0);
114 memcpy(dst, tmp, NS_INADDRSZ);
115 return (1);
116 }


我现在钻牛角尖的一个问题是,为什么在linux2.6内核中找不到呢?(我尝试了好几种方法找,1 把linux2.6内核源码下载下来找 2. 在http://fxr.watson.org/fxr/source/libkern/inet_pton.c#L54也找不到)
...全文
169 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ww2000e 2012-03-23
  • 打赏
  • 举报
回复
http://lxr.linux.no/#linux+v3.3/net/core/utils.c#L114

搜了个 不知道是不是
pengfoo 2012-03-23
  • 打赏
  • 举报
回复
问题已解决。。是我的ubuntu中是glibc中的。。具体参见。
http://topic.csdn.net/u/20120322/17/47875547-45e6-49ad-bdc9-f583e969be2f.html?1196108484
pengfoo 2012-03-23
  • 打赏
  • 举报
回复
libc的代码不是linux的内核代码吗??是属于gcc的还是??[Quote=引用 3 楼 linlan999 的回复:]
lz 的代码时libc中的代码
http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/inet/inet_pton.c?rev=1.3.10.1.8.1;content-type=text%2Fplain
[/Quote]
linlan999 2012-03-23
  • 打赏
  • 举报
回复
这个应该在c库中找吧

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧