[klibc] [PATCH] fix root on nfs
Olaf Hering
olh at suse.de
Mon May 24 21:06:24 PDT 2004
this patch fixes root on nfs for me.
The struct is not initialized correctly, the option for bind is wrong.
And the pad_len algorithm looks a bit odd:
int main(void)
{
int i;
for (i = 0; i < 42; i++) {
printf("%d %d %d\n", i, (i + 3) & ~3,
(i % 8) ? (i & 7) + 8 : i);
}
return 0;
}
1 4 9
2 4 10
3 4 11
4 4 12
5 8 13
6 8 14
7 8 15
8 8 8
9 12 9
10 12 10
11 12 11
12 12 12
13 16 13
14 16 14
15 16 15
16 16 16
17 20 9
18 20 10
19 20 11
20 20 12
21 24 13
22 24 14
23 24 15
24 24 24
25 28 9
26 28 10
diff -p -ppurN klibc-0.116/klibc/inet/bindresvport.c klibc-0.116.nfsmount/klibc/inet/bindresvport.c
--- klibc-0.116/klibc/inet/bindresvport.c 2003-12-08 02:33:24.000000000 +0100
+++ klibc-0.116.nfsmount/klibc/inet/bindresvport.c 2004-05-24 20:01:50.000000000 +0200
@@ -23,7 +23,7 @@ int bindresvport(int sd, struct sockaddr
if (sin == NULL) {
sin = &me;
memset(sin, 0, sizeof(me));
- sin->sin_port = AF_INET;
+ sin->sin_family = AF_INET;
}
else if (sin->sin_family != AF_INET) {
errno = EPFNOSUPPORT;
@@ -37,7 +37,7 @@ int bindresvport(int sd, struct sockaddr
for (i = 0; i < NUM_PORTS; i++, port++) {
sin->sin_port = htons(port);
- if ((ret = bind(sd, (struct sockaddr *)&sin, sizeof(*sin))) != -1)
+ if ((ret = bind(sd, (struct sockaddr *)sin, sizeof(*sin))) != -1)
break;
if (port == END_PORT)
port = START_PORT;
diff -p -ppurN klibc-0.116/nfsmount/mount.c klibc-0.116.nfsmount/nfsmount/mount.c
--- klibc-0.116/nfsmount/mount.c 2003-05-06 00:15:09.000000000 +0200
+++ klibc-0.116.nfsmount/nfsmount/mount.c 2004-05-24 18:52:35.000000000 +0200
@@ -77,9 +77,7 @@ static void get_ports(__u32 server, cons
static inline int pad_len(int len)
{
- if (len % 8)
- return (len & 7) + 8;
- return len;
+ return (len + 3) & ~3;
}
static inline void dump_params(__u32 server,
--
USB is for mice, FireWire is for men!
sUse lINUX ag, nÜRNBERG
More information about the klibc
mailing list