summaryrefslogtreecommitdiff
path: root/hurd/porting
diff options
context:
space:
mode:
Diffstat (limited to 'hurd/porting')
-rw-r--r--hurd/porting/guidelines.mdwn6
-rw-r--r--hurd/porting/system_api_limitations.mdwn3
2 files changed, 4 insertions, 5 deletions
diff --git a/hurd/porting/guidelines.mdwn b/hurd/porting/guidelines.mdwn
index 5986269e..624f7fd5 100644
--- a/hurd/porting/guidelines.mdwn
+++ b/hurd/porting/guidelines.mdwn
@@ -132,6 +132,8 @@ If you get Bad File Descriptor error when trying to read from a file (or accessi
<http://pubs.opengroup.org/onlinepubs/009695399/basedefs/limits.h.html>
+Also see <https://eklitzke.org/path-max-is-tricky> and <https://insanecoding.blogspot.com/2007/11/pathmax-simply-isnt.html>
+
Every unconditionalized use of `PATH_MAX`, `MAX_PATH` or `MAXPATHLEN` is a POSIX incompatibility. If there is no upper limit on the length of a path (as its the case for GNU), this symbol is not defined in any header file. Instead, you need to either use a different implementation that does not rely on the length of a string or use `sysconf()` to query the length at runtime. If `sysconf()` returns -1, you have to use `realloc()` to allocate the needed memory dynamically. Usually it is thus simpler to just use dynamic allocation. Sometimes the amount is actually known. Else, a geometrically growing loop can be used: for instance, see [Pulseaudio patch](http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;filename=patch-pulse;att=1;bug=522100). Note that in some cases there are GNU extensions that just work fine: when the `__GLIBC__` macro is defined, `getcwd()` calls can be just replaced by `get_current_dir_name()` calls.
Note: constants such as `_POSIX_PATH_MAX` are only the minimum required value
@@ -140,10 +142,10 @@ for a potential corresponding `PATH_MAX` macro. They are not a replacement for
Note 2: Yes, some POSIX functions such as `realpath()` actually assume that
`PATH_MAX` is defined. This is a bug of the POSIX standard, which got fixed in
-POSIX 2001, in which one can simply pass `NULL` to get a dynamically
+POSIX 2008, in which one can simply pass `NULL` to get a dynamically
allocated buffer. One can thus use:
- #if _POSIX_VERSION >= 200112 || defined(__GLIBC__)
+ #if _POSIX_VERSION >= 200809 || defined(__GLIBC__)
char *path = realpath(orig, NULL);
#else
char path[PATH_MATH];
diff --git a/hurd/porting/system_api_limitations.mdwn b/hurd/porting/system_api_limitations.mdwn
index 1615ccc0..5fe13fdb 100644
--- a/hurd/porting/system_api_limitations.mdwn
+++ b/hurd/porting/system_api_limitations.mdwn
@@ -22,8 +22,5 @@ These are the known system API limits that have porting implications.
**_[\#47998](http://bugs.debian.org/47998): `msgget` IPC not implemented_**
-**_[[nice() doesn't work|open_issues/nice_vs_mach_thread_priorities]]_**.
-
**_[\#187391](http://bugs.debian.org/187391): libc0.3-dev: `sockaddr_un.sun_path` can't be assigned a `const char *` when compiling with g++_**<br />**breaks:** fam, gail<br />**status:** maybe this should be in [[PortingIssues]] (see _long_ bug log)
-**_[\#190367](http://bugs.debian.org/190367): libc0.3-dev: `fcntl` `F_GETLK` not implemented (`ENOSYS`)_**<br />**breaks:** gnome-session (and others) from running<br />**error:** misc lock-related errors