diff options
| author | Paul Eggert | 2013-11-03 22:09:03 -0800 |
|---|---|---|
| committer | Paul Eggert | 2013-11-03 22:09:03 -0800 |
| commit | 91f2d272895257f23596075a0cc42e6e5f4e490f (patch) | |
| tree | 5bcf0c44acc54bd56eef8394e50ff7d4cc24d5b3 /src/process.c | |
| parent | 0a749fa0e64fc88bcd1772253774d7e44ecfe8ce (diff) | |
| download | emacs-91f2d272895257f23596075a0cc42e6e5f4e490f.tar.gz emacs-91f2d272895257f23596075a0cc42e6e5f4e490f.zip | |
Port to stricter C99 platforms.
Especially, C99 prohibits nesting a struct X inside struct Y if
struct X has a flexible array member.
Also, merge from gnulib, incorporating:
2013-11-03 intprops: port to Oracle Studio c99
* lib/intprops.h: Update from gnulib.
* src/alloc.c (struct sdata): New type.
(sdata): Implement in terms of struct sdata.
Remove u member; all uses replaced by next_vector, set_next_vector.
(SDATA_SELECTOR, SDATA_DATA, SDATA_DATA_OFFSET): Adjust to sdata change.
(SDATA_DATA_OFFSET): Now a constant, not a macro.
(struct sblock): Rename first_data member to data, which is now
a flexible array member. All uses changed.
(next_vector, set_next_vector, large_vector_vec): New functions.
(vector_alignment): New constant.
(roundup_size): Make it a multiple of ALIGNOF_STRUCT_LISP_VECTOR, too.
(struct large-vector): Now merely a NEXT member, since the old approach
ran afoul of stricter C99. All uses changed to use
large_vector_vec or large_vector_offset.
(large_vector_offset): New constant.
* src/dispnew.c: Include tparam.h, for tgetent.
Do not include term.h; no longer needed.
* src/gnutls.c (Fgnutls_boot): Don't continue after calling a _Noreturn.
* src/lisp.h (ENUM_BF) [__SUNPRO_C && __STDC__]: Use unsigned int.
(struct Lisp_Vector): Use a flexible array member for contents,
instead of a union with a member that is an array of size 1.
All uses changed.
(ALIGNOF_STRUCT_LISP_VECTOR): New constant, to make up for the
fact that the struct no longer contains a union.
(struct Lisp_Misc_Any, struct Lisp_Marker, struct Lisp_Overlay)
(struct Lisp_Save_Value, struct Lisp_Free):
Use unsigned, not int, for spacers, to avoid c99 warning.
(union specbinding): Use unsigned, not bool, for bitfield, as
bool is not portable to pre-C99 hosts.
Diffstat (limited to 'src/process.c')
| -rw-r--r-- | src/process.c | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/src/process.c b/src/process.c index 91bc090e76e..f6aa576e8b7 100644 --- a/src/process.c +++ b/src/process.c | |||
| @@ -1333,15 +1333,15 @@ Returns nil if format of ADDRESS is invalid. */) | |||
| 1333 | 1333 | ||
| 1334 | for (i = 0; i < nargs; i++) | 1334 | for (i = 0; i < nargs; i++) |
| 1335 | { | 1335 | { |
| 1336 | if (! RANGED_INTEGERP (0, p->u.contents[i], 65535)) | 1336 | if (! RANGED_INTEGERP (0, p->contents[i], 65535)) |
| 1337 | return Qnil; | 1337 | return Qnil; |
| 1338 | 1338 | ||
| 1339 | if (nargs <= 5 /* IPv4 */ | 1339 | if (nargs <= 5 /* IPv4 */ |
| 1340 | && i < 4 /* host, not port */ | 1340 | && i < 4 /* host, not port */ |
| 1341 | && XINT (p->u.contents[i]) > 255) | 1341 | && XINT (p->contents[i]) > 255) |
| 1342 | return Qnil; | 1342 | return Qnil; |
| 1343 | 1343 | ||
| 1344 | args[i+1] = p->u.contents[i]; | 1344 | args[i+1] = p->contents[i]; |
| 1345 | } | 1345 | } |
| 1346 | 1346 | ||
| 1347 | return Fformat (nargs+1, args); | 1347 | return Fformat (nargs+1, args); |
| @@ -1983,7 +1983,7 @@ conv_sockaddr_to_lisp (struct sockaddr *sa, int len) | |||
| 1983 | len = sizeof (sin->sin_addr) + 1; | 1983 | len = sizeof (sin->sin_addr) + 1; |
| 1984 | address = Fmake_vector (make_number (len), Qnil); | 1984 | address = Fmake_vector (make_number (len), Qnil); |
| 1985 | p = XVECTOR (address); | 1985 | p = XVECTOR (address); |
| 1986 | p->u.contents[--len] = make_number (ntohs (sin->sin_port)); | 1986 | p->contents[--len] = make_number (ntohs (sin->sin_port)); |
| 1987 | cp = (unsigned char *) &sin->sin_addr; | 1987 | cp = (unsigned char *) &sin->sin_addr; |
| 1988 | break; | 1988 | break; |
| 1989 | } | 1989 | } |
| @@ -1995,9 +1995,9 @@ conv_sockaddr_to_lisp (struct sockaddr *sa, int len) | |||
| 1995 | len = sizeof (sin6->sin6_addr)/2 + 1; | 1995 | len = sizeof (sin6->sin6_addr)/2 + 1; |
| 1996 | address = Fmake_vector (make_number (len), Qnil); | 1996 | address = Fmake_vector (make_number (len), Qnil); |
| 1997 | p = XVECTOR (address); | 1997 | p = XVECTOR (address); |
| 1998 | p->u.contents[--len] = make_number (ntohs (sin6->sin6_port)); | 1998 | p->contents[--len] = make_number (ntohs (sin6->sin6_port)); |
| 1999 | for (i = 0; i < len; i++) | 1999 | for (i = 0; i < len; i++) |
| 2000 | p->u.contents[i] = make_number (ntohs (ip6[i])); | 2000 | p->contents[i] = make_number (ntohs (ip6[i])); |
| 2001 | return address; | 2001 | return address; |
| 2002 | } | 2002 | } |
| 2003 | #endif | 2003 | #endif |
| @@ -2022,7 +2022,7 @@ conv_sockaddr_to_lisp (struct sockaddr *sa, int len) | |||
| 2022 | 2022 | ||
| 2023 | i = 0; | 2023 | i = 0; |
| 2024 | while (i < len) | 2024 | while (i < len) |
| 2025 | p->u.contents[i++] = make_number (*cp++); | 2025 | p->contents[i++] = make_number (*cp++); |
| 2026 | 2026 | ||
| 2027 | return address; | 2027 | return address; |
| 2028 | } | 2028 | } |
| @@ -2093,7 +2093,7 @@ conv_lisp_to_sockaddr (int family, Lisp_Object address, struct sockaddr *sa, int | |||
| 2093 | { | 2093 | { |
| 2094 | struct sockaddr_in *sin = (struct sockaddr_in *) sa; | 2094 | struct sockaddr_in *sin = (struct sockaddr_in *) sa; |
| 2095 | len = sizeof (sin->sin_addr) + 1; | 2095 | len = sizeof (sin->sin_addr) + 1; |
| 2096 | hostport = XINT (p->u.contents[--len]); | 2096 | hostport = XINT (p->contents[--len]); |
| 2097 | sin->sin_port = htons (hostport); | 2097 | sin->sin_port = htons (hostport); |
| 2098 | cp = (unsigned char *)&sin->sin_addr; | 2098 | cp = (unsigned char *)&sin->sin_addr; |
| 2099 | sa->sa_family = family; | 2099 | sa->sa_family = family; |
| @@ -2104,12 +2104,12 @@ conv_lisp_to_sockaddr (int family, Lisp_Object address, struct sockaddr *sa, int | |||
| 2104 | struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa; | 2104 | struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa; |
| 2105 | uint16_t *ip6 = (uint16_t *)&sin6->sin6_addr; | 2105 | uint16_t *ip6 = (uint16_t *)&sin6->sin6_addr; |
| 2106 | len = sizeof (sin6->sin6_addr) + 1; | 2106 | len = sizeof (sin6->sin6_addr) + 1; |
| 2107 | hostport = XINT (p->u.contents[--len]); | 2107 | hostport = XINT (p->contents[--len]); |
| 2108 | sin6->sin6_port = htons (hostport); | 2108 | sin6->sin6_port = htons (hostport); |
| 2109 | for (i = 0; i < len; i++) | 2109 | for (i = 0; i < len; i++) |
| 2110 | if (INTEGERP (p->u.contents[i])) | 2110 | if (INTEGERP (p->contents[i])) |
| 2111 | { | 2111 | { |
| 2112 | int j = XFASTINT (p->u.contents[i]) & 0xffff; | 2112 | int j = XFASTINT (p->contents[i]) & 0xffff; |
| 2113 | ip6[i] = ntohs (j); | 2113 | ip6[i] = ntohs (j); |
| 2114 | } | 2114 | } |
| 2115 | sa->sa_family = family; | 2115 | sa->sa_family = family; |
| @@ -2140,8 +2140,8 @@ conv_lisp_to_sockaddr (int family, Lisp_Object address, struct sockaddr *sa, int | |||
| 2140 | } | 2140 | } |
| 2141 | 2141 | ||
| 2142 | for (i = 0; i < len; i++) | 2142 | for (i = 0; i < len; i++) |
| 2143 | if (INTEGERP (p->u.contents[i])) | 2143 | if (INTEGERP (p->contents[i])) |
| 2144 | *cp++ = XFASTINT (p->u.contents[i]) & 0xff; | 2144 | *cp++ = XFASTINT (p->contents[i]) & 0xff; |
| 2145 | } | 2145 | } |
| 2146 | 2146 | ||
| 2147 | #ifdef DATAGRAM_SOCKETS | 2147 | #ifdef DATAGRAM_SOCKETS |
| @@ -3723,7 +3723,9 @@ network_interface_info (Lisp_Object ifname) | |||
| 3723 | 3723 | ||
| 3724 | any = 1; | 3724 | any = 1; |
| 3725 | for (n = 0; n < 6; n++) | 3725 | for (n = 0; n < 6; n++) |
| 3726 | p->u.contents[n] = make_number (((unsigned char *)&rq.ifr_hwaddr.sa_data[0])[n]); | 3726 | p->contents[n] = make_number (((unsigned char *) |
| 3727 | &rq.ifr_hwaddr.sa_data[0]) | ||
| 3728 | [n]); | ||
| 3727 | elt = Fcons (make_number (rq.ifr_hwaddr.sa_family), hwaddr); | 3729 | elt = Fcons (make_number (rq.ifr_hwaddr.sa_family), hwaddr); |
| 3728 | } | 3730 | } |
| 3729 | #elif defined (HAVE_GETIFADDRS) && defined (LLADDR) | 3731 | #elif defined (HAVE_GETIFADDRS) && defined (LLADDR) |
| @@ -3746,7 +3748,7 @@ network_interface_info (Lisp_Object ifname) | |||
| 3746 | 3748 | ||
| 3747 | memcpy (linkaddr, LLADDR (sdl), sdl->sdl_alen); | 3749 | memcpy (linkaddr, LLADDR (sdl), sdl->sdl_alen); |
| 3748 | for (n = 0; n < 6; n++) | 3750 | for (n = 0; n < 6; n++) |
| 3749 | p->u.contents[n] = make_number (linkaddr[n]); | 3751 | p->contents[n] = make_number (linkaddr[n]); |
| 3750 | 3752 | ||
| 3751 | elt = Fcons (make_number (it->ifa_addr->sa_family), hwaddr); | 3753 | elt = Fcons (make_number (it->ifa_addr->sa_family), hwaddr); |
| 3752 | break; | 3754 | break; |