docs: Routine refresh of the documentation for guestfs(3) and guestfish(1).
[libguestfs.git] / daemon / htonl.c
1 /* Copyright (C) 1993,97,2002 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
8
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
13
14    You should have received a copy of the GNU Lesser General Public
15    License along with the GNU C Library; if not, write to the Free
16    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17    02111-1307 USA.  */
18
19 /* Windows lacks htonl, htons, ntohl, ntohs.  It defines them in
20  * header files, but doesn't have them in any library.  However
21  * because it defined them we can end up with conflicting
22  * definitions, which is why here we are careful to avoid
23  * including any Windows header file.
24  */
25
26 #include <config.h>
27
28 #include <stdint.h>
29 #include <sys/param.h>
30 #include <byteswap.h>
31
32 #ifndef HAVE_NTOHL
33
34 #undef  htonl
35 #undef  ntohl
36
37 uint32_t
38 htonl (x)
39      uint32_t x;
40 {
41 #if defined(BYTE_ORDER) && defined(BIG_ENDIAN) && defined(LITTLE_ENDIAN)
42 #if BYTE_ORDER == BIG_ENDIAN
43   return x;
44 #elif BYTE_ORDER == LITTLE_ENDIAN
45   return bswap_32 (x);
46 #else
47 # error "What kind of system is this?"
48 #endif
49 #else
50 #error "BYTE_ORDER/BIG_ENDIAN/LITTLE_ENDIAN are not defined"
51 #endif
52 }
53
54 uint32_t ntohl (uint32_t x) { return htonl (x); }
55
56 #endif /* !HAVE_NTOHL */
57
58 #ifndef HAVE_NTOHS
59
60 #undef  htons
61 #undef  ntohs
62
63 uint16_t
64 htons (x)
65      uint16_t x;
66 {
67 #if defined(BYTE_ORDER) && defined(BIG_ENDIAN) && defined(LITTLE_ENDIAN)
68 #if BYTE_ORDER == BIG_ENDIAN
69   return x;
70 #elif BYTE_ORDER == LITTLE_ENDIAN
71   return bswap_16 (x);
72 #else
73 # error "What kind of system is this?"
74 #endif
75 #else
76 #error "BYTE_ORDER/BIG_ENDIAN/LITTLE_ENDIAN are not defined"
77 #endif
78 }
79
80 uint16_t ntohs (uint16_t x) { return htons (x); }
81
82 #endif /* !HAVE_NTOHS */