diff options
author | Jakub Jelinek <jakub@redhat.com> | 2004-12-17 10:09:19 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2004-12-17 10:09:19 +0000 |
commit | 337cd636a17559b7fba33c480759a4e6187e0647 (patch) | |
tree | 6195524bb75b92e28500e9c4153265a409ede509 /sysdeps/unix/sysv/linux/gethostid.c | |
parent | 6ec2d7443853bce3f0957712540be6b296c1a672 (diff) | |
download | glibc-337cd636a17559b7fba33c480759a4e6187e0647.tar glibc-337cd636a17559b7fba33c480759a4e6187e0647.tar.gz glibc-337cd636a17559b7fba33c480759a4e6187e0647.tar.bz2 glibc-337cd636a17559b7fba33c480759a4e6187e0647.zip |
Updated to fedora-glibc-20041217T0906cvs/fedora-glibc-2_3_3-97
Diffstat (limited to 'sysdeps/unix/sysv/linux/gethostid.c')
-rw-r--r-- | sysdeps/unix/sysv/linux/gethostid.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/sysdeps/unix/sysv/linux/gethostid.c b/sysdeps/unix/sysv/linux/gethostid.c index c7f894033d..f44a9afbf2 100644 --- a/sysdeps/unix/sysv/linux/gethostid.c +++ b/sysdeps/unix/sysv/linux/gethostid.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1995,1996,1998-2001,2003 Free Software Foundation, Inc. +/* Copyright (C) 1995,1996,1998-2001,2003,2004 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -33,6 +33,7 @@ sethostid (id) { int fd; ssize_t written; + int32_t id32 = id; /* Test for appropriate rights to set host ID. */ if (__libc_enable_secure) @@ -41,16 +42,23 @@ sethostid (id) return -1; } + /* Make sure the ID is not too large. Needed for bi-arch support. */ + if (id32 != id) + { + __set_errno (EOVERFLOW); + return -1; + } + /* Open file for writing. Everybody is allowed to read this file. */ fd = open_not_cancel (HOSTIDFILE, O_CREAT|O_WRONLY|O_TRUNC, 0644); if (fd < 0) return -1; - written = write_not_cancel (fd, &id, sizeof (id)); + written = write_not_cancel (fd, &id32, sizeof (id32)); close_not_cancel_no_status (fd); - return written != sizeof (id) ? -1 : 0; + return written != sizeof (id32) ? -1 : 0; } #else @@ -66,7 +74,7 @@ gethostid () size_t buflen; char *buffer; struct hostent hostbuf, *hp; - unsigned long int id; + int32_t id; struct in_addr in; int herr; int fd; @@ -110,6 +118,6 @@ gethostid () /* For the return value to be not exactly the IP address we do some bit fiddling. */ - return in.s_addr << 16 | in.s_addr >> 16; + return (int32_t) (in.s_addr << 16 | in.s_addr >> 16); } #endif |