[Qemu-devel] [patch] use socklen_t with getsockopt()
obvious fixup ... getsockopt() takes a socklen_t, not an int -mike signature.asc Description: This is a digitally signed message part. --- linux-user/syscall.c +++ linux-user/syscall.c @@ -642,7 +642,8 @@ static long do_setsockopt(int sockfd, in static long do_getsockopt(int sockfd, int level, int optname, target_ulong optval, target_ulong optlen) { -int len, lv, val, ret; +int len, val, ret; +socklen_t lv; switch(level) { case TARGET_SOL_SOCKET: @@ -665,7 +666,7 @@ static long do_getsockopt(int sockfd, in len = tget32(optlen); if (len 0) return -EINVAL; -lv = sizeof(int); +lv = sizeof(val); ret = get_errno(getsockopt(sockfd, level, optname, val, lv)); if (ret 0) return ret; @@ -698,7 +699,7 @@ static long do_getsockopt(int sockfd, in len = tget32(optlen); if (len 0) return -EINVAL; -lv = sizeof(int); +lv = sizeof(val); ret = get_errno(getsockopt(sockfd, level, optname, val, lv)); if (ret 0) return ret;
Re: [Qemu-devel] [patch] use socklen_t with getsockopt()
Mike Frysinger wrote: On Thursday 05 April 2007, Jamie Lokier wrote: Sylvain Petreolle wrote: Was incorrect before too, since it was sizeof(int) in the first place ? The old type of val was int, so it made no different to the size. When val is of type socklen_t, it matters. val is still of type int which is fine ... socklen_t is for the variable which describes the length of val Yes, thanks for pointing it out. -- Jamie
Re: [Qemu-devel] [patch] use socklen_t with getsockopt()
On Thursday 05 April 2007, Jamie Lokier wrote: Sylvain Petreolle wrote: Was incorrect before too, since it was sizeof(int) in the first place ? The old type of val was int, so it made no different to the size. When val is of type socklen_t, it matters. val is still of type int which is fine ... socklen_t is for the variable which describes the length of val -mike pgpV7xFU8CXKi.pgp Description: PGP signature
Re: [Qemu-devel] [patch] use socklen_t with getsockopt()
On Friday 06 April 2007 22:51, Mike Frysinger wrote: On Thursday 05 April 2007, Jamie Lokier wrote: Sylvain Petreolle wrote: Was incorrect before too, since it was sizeof(int) in the first place ? The old type of val was int, so it made no different to the size. When val is of type socklen_t, it matters. val is still of type int which is fine ... socklen_t is for the variable which describes the length of val It's worth noting that socklen_t should be int anyway. From the accept(2) manpage: NOTE The third argument of accept() was originally declared as an `int *' (and is that under libc4 and libc5 and on many other systems like 4.x BSD, SunOS 4, SGI); a POSIX.1g draft standard wanted to change it into a `size_t *', and that is what it is for SunOS 5. Later POSIX drafts have `socklen_t *', and so do the Single Unix Specification and glibc2. Quoting Linus Torvalds: _Any_ sane library _must_ have socklen_t be the same size as int. Anything else breaks any BSD socket layer stuff. POSIX initially did make it a size_t, and I (and hopefully others, but obviously not too many) complained to them very loudly indeed. Making it a size_t is completely broken, exactly because size_t very seldom is the same size as int on 64-bit architectures, for example. And it has to be the same size as int because that's what the BSD socket interface is. Anyway, the POSIX people eventually got a clue, and created socklen_t. They shouldn't have touched it in the first place, but once they did they felt it had to have a named type for some unfath- omable reason (probably somebody didn't like losing face over having done the original stupid thing, so they silently just renamed their blunder).
Re : [Qemu-devel] [patch] use socklen_t with getsockopt()
Was incorrect before too, since it was sizeof(int) in the first place ? Sylvain - Message d'origine De : Thiemo Seufer [EMAIL PROTECTED] À : Mike Frysinger [EMAIL PROTECTED] Cc : Qemu-devel@nongnu.org Envoyé le : Dimanche, 1 Avril 2007, 20h43mn 02s Objet : Re: [Qemu-devel] [patch] use socklen_t with getsockopt() Mike Frysinger wrote: obvious fixup ... getsockopt() takes a socklen_t, not an int -mike This is incorrect. Its initial value is sizeof(val). Thiemo
Re: Re : [Qemu-devel] [patch] use socklen_t with getsockopt()
Sylvain Petreolle wrote: Was incorrect before too, since it was sizeof(int) in the first place ? The old type of val was int, so it made no different to the size. When val is of type socklen_t, it matters. -- Jamie
Re: [Qemu-devel] [patch] use socklen_t with getsockopt()
Mike Frysinger wrote: obvious fixup ... getsockopt() takes a socklen_t, not an int -mike This is incorrect. Its initial value is sizeof(val). Thiemo
Re: [Qemu-devel] [patch] use socklen_t with getsockopt()
On Sunday 01 April 2007, Thiemo Seufer wrote: Mike Frysinger wrote: obvious fixup ... getsockopt() takes a socklen_t, not an int This is incorrect. Its initial value is sizeof(val). attached -mike pgpxUDF1iyg7E.pgp Description: PGP signature --- linux-user/syscall.c +++ linux-user/syscall.c @@ -642,7 +642,8 @@ static long do_setsockopt(int sockfd, in static long do_getsockopt(int sockfd, int level, int optname, target_ulong optval, target_ulong optlen) { -int len, lv, val, ret; +int len, val, ret; +socklen_t lv; switch(level) { case TARGET_SOL_SOCKET: @@ -665,7 +666,7 @@ static long do_getsockopt(int sockfd, in len = tget32(optlen); if (len 0) return -EINVAL; -lv = sizeof(int); +lv = sizeof(val); ret = get_errno(getsockopt(sockfd, level, optname, val, lv)); if (ret 0) return ret; @@ -698,7 +699,7 @@ static long do_getsockopt(int sockfd, in len = tget32(optlen); if (len 0) return -EINVAL; -lv = sizeof(int); +lv = sizeof(val); ret = get_errno(getsockopt(sockfd, level, optname, val, lv)); if (ret 0) return ret;
[Qemu-devel] [patch] use socklen_t with getsockopt()
obvious fixup ... getsockopt() takes a socklen_t, not an int -mike pgpmFlADRziAp.pgp Description: PGP signature --- linux-user/syscall.c +++ linux-user/syscall.c @@ -642,7 +642,8 @@ static long do_setsockopt(int sockfd, in static long do_getsockopt(int sockfd, int level, int optname, target_ulong optval, target_ulong optlen) { -int len, lv, val, ret; +int len, val, ret; +socklen_t lv; switch(level) { case TARGET_SOL_SOCKET: @@ -665,7 +666,7 @@ static long do_getsockopt(int sockfd, in len = tget32(optlen); if (len 0) return -EINVAL; -lv = sizeof(int); +lv = sizeof(lv); ret = get_errno(getsockopt(sockfd, level, optname, val, lv)); if (ret 0) return ret; @@ -698,7 +699,7 @@ static long do_getsockopt(int sockfd, in len = tget32(optlen); if (len 0) return -EINVAL; -lv = sizeof(int); +lv = sizeof(lv); ret = get_errno(getsockopt(sockfd, level, optname, val, lv)); if (ret 0) return ret;