summaryrefslogtreecommitdiff
path: root/Distrib/PortingIssues.mdwn
diff options
context:
space:
mode:
authorOgnyan Kulev <ogi@fmi.uni-sofia.bg>2003-04-06 14:51:00 +0000
committerOgnyan Kulev <ogi@fmi.uni-sofia.bg>2003-04-06 14:51:00 +0000
commitd09a51da28b4d486711ec8b9bd36acb387e73f6d (patch)
tree2f7dfae7af5b6094d5dfa018ed1648b47851a207 /Distrib/PortingIssues.mdwn
parentc22202275c48e9317725447fc0b0ea105bbec61c (diff)
none
Diffstat (limited to 'Distrib/PortingIssues.mdwn')
-rw-r--r--Distrib/PortingIssues.mdwn27
1 files changed, 15 insertions, 12 deletions
diff --git a/Distrib/PortingIssues.mdwn b/Distrib/PortingIssues.mdwn
index 2361d064..fb66791f 100644
--- a/Distrib/PortingIssues.mdwn
+++ b/Distrib/PortingIssues.mdwn
@@ -75,6 +75,7 @@ Fixed code:
...
#ifdef MAXHOSTNAMELEN
+
gethostname(localhost, sizeof(localhost));
#else
localhost = xgethostname();
@@ -164,32 +165,34 @@ See [a simple fix for TIOCFLUSH in telnet](http://mail.gnu.org/archive/html/bug-
The following declaration:
- sockaddr_un sun = { AF_UNIX, "" };
+ sockaddr_un sun = { AF_UNIX, "/path/to/socket" };
won't work on GNU/Hurd. The Glibc API requires that the second parameter of a `sockaddr_un` struct is array of chars, but NOT pointer to array of chars. Glibc wants a nul-terminated string of chars there, so we have to copy them directly into the `sun_path` address. An example:
- sockaddr_un sa;
+ sockaddr_un su;
/* AF_LOCAL is the canonical flag in Glibc.
Use AF_UNIX if you want compatibility. */
- sa.sun_family = AF_LOCAL;
+ su.sun_family = AF_LOCAL;
/* Copy the string into sun_path. It must be
- no longer than 108 characters. */
- strcpy (sa.sun_path, "/path/to/socket");
+ no longer than approximately 100 characters. */
+ strcpy (su.sun_path, "/path/to/socket");
+ /* Use `SUN_LEN (su)' in socket functions. */
If you have pointer to array of characters as file name, you'd better use the following code:
- strncpy (sa.sun_path, filename, sizeof (sa.sun_path));
- sa.sun_path[sizeof (sa.sun_path) - 1] = '\0';
+ strncpy (su.sun_path, filename, sizeof (su.sun_path));
+ /* Use `sizeof (su)' in socket functions. */
-If you expect file name longer than 108 characters, use the following code:
+If you expect file name longer than approximately 100 characters, use the following code:
/* `offsetof', `alloca' and `AF_LOCAL' may not
be available everywhere. */
- socklen_t sa_len = offsetof (struct sockaddr_un, sun_path)
+ socklen_t su_len = offsetof (struct sockaddr_un, sun_path)
+ strlen (filename) + 1;
- struct sockaddr_un *sa = alloca (sa_len);
- sa->sun_family = AF_LOCAL;
- strcpy (sa->sun_path, filename);
+ struct sockaddr_un *su = alloca (su_len);
+ su->sun_family = AF_LOCAL;
+ strcpy (su->sun_path, filename);
+ /* Use `SUN_LEN (su)' in socket functions. */
NOTE: the current API is subject to change, see the notes in Glibc's docs ("info libc" and search for `sockaddr_un`) and [Debian bug #187391](http://bugs.debian.org/187391).