Errata

abort()
We've corrected the description of what this function does.
accept()
This function gives an error of EINVAL if you called accept() on a socket that you hadn't called listen() on.
bind()
This function sets errno to ENOTSOCK if the given file descriptor isn't for a socket.
brk()
Neutrino doesn't support swapping.
ClockCycles()
It is safe to call this function from an interrupt handler.
ConnectAttach(), ConnectAttach_r()
These functions can give an error of ENXIO.
struct dirent
The d_name member is defined as an array of one character; you have to allocate space for the name.
dlopen()
The runtime library search path specified by the -rpath option to ld is stored in the binary, not in an environment variable.
GETIOVBASE(), GETIOVLEN()
You need to include <sys/types.h>, or else you'll get errors when you compile because iov_t isn't defined.
InterruptAttach()
The documentation for this function no longer implies that Neutrino supports paging.
iofunc_fdinfo_default()
We've corrected the description of what this function returns.
iofunc_notify()
This function returns -1 on success to indicate to the resource manager library that it should return a one-part IOV to the client.
iofunc_openfd()
This function uses _IO_FLAG_* bits, not O_RDONLY, etc.
iofunc_lseek(), iofunc_lseek_default()
We've corrected the description of what these functions return.
iofunc_notify_trigger()
If the specified count is greater than or equal to the trigger count for the particular notification list element, this function calls MsgDeliverEvent() to deliver the event to the client.
malloc()
We've corrected the description of _amblksiz in the documentation for malloc().
mbsrtowcs(), mbstowcs()
The n argument to these functions is the number of wide characters, not the number of bytes.
mem_offset()
This function gives an error of EOVERFLOW (not E2BIG) if the address is too large for the 32-bit off_t.
mq_send()
If the number of elements on the specified queue is equal to its mq_maxmsg, and O_NONBLOCK wasn't set (in the oflag argument to mq_open()), the call to mq_send() blocks.
msync()
  • We've corrected the description of the MS_CACHE_ONLY flag (a QNX Neutrino extension).
  • This function sets errno to EINTR if the call is interrupted by a signal.
name_attach()
  • This function fails and sets errno to EEXIST if the specified path already exists.
  • If name_attach() creates a channel, the channel will have the _NTO_CHF_DISCONNECT, _NTO_CHF_COID_DISCONNECT and _NTO_CHF_UNBLOCK flags set.
name_close()
This function operates on a side-channel connection ID, not a file descriptor.
name_open()
This function doesn't attach to a name; it searches for the given name.
pathmgr_symlink()
The order of the arguments is now correct.
posix_mem_offset(), posix_mem_offset64()
We corrected the description of the contig_len argument.
posix_typed_mem_open()
The tflag argument is of type int.

We've corrected the details about the resolution of the name of the typed memory object.

pthread_barrier_wait()
This function returns PTHREAD_BARRIER_SERIAL_THREAD to one of the threads waiting at a barrier.
pthread_cond_timedwait()
We've corrected the example so that it runs correctly for timeouts of less than 1 second.
pthread_getname_np(), pthread_setname_np()
You don't have to be root in order to get or set a thread's name.
pthread_mutexattr_init()
We corrected the synopsis of this function.
pthread_mutex_lock()
You can allow recursive behavior by using pthread_mutexattr_setrecursive() to set the attribute to PTHREAD_RECURSIVE_ENABLE after calling pthread_mutex_init().
readdir_r()
This function doesn't set errno; it returns any error codes.
resmgr_context_t
The info member of this structure is a _msg_info structure, not a pointer to one.
resmgr_handle_tune()
This function is declared in <sys/resmgr.h>.
resmgr_io_funcs_t
We corrected the name and definition of the openfd member.
resmgr_iofuncs()
This function is declared in <sys/resmgr.h>, not <resmgr.h>.
_RESMGR_NPARTS()
This macro returns the negative of the number of parts (to distinguish the number from error codes that the resource manager's handler functions might return).
sbrk()
Neutrino doesn't support swapping.
SETIOV()
You need to include <sys/types.h>, or else you'll get errors when you compile because iov_t isn't defined.
shm_open()
You can't open shared memory across the network.
sigprocmask()
The classification for this function is POSIX 1003.1 CX.
snprintf(), sprintf(), sscanf(), swprintf(), swscanf()
It's safe to call these functions in a signal handler if the data isn't floating point.
socket()
This function sets errno to EAFNOSUPPORT if the specified address family isn't supported.
spawn()
We've corrected the description of the SPAWN_CHECK_SCRIPT flag in the inheritance structure.
SYSPAGE_ENTRY()
The sec variable in the example is now a double instead of a float.
timer_create()
We've corrected the description of CLOCK_SOFTTIME.
TimerTimeout()
The timeout value starts timing out when TimerTimeout() is called, not when the blocking state is entered. It might be possible to get preempted after calling TimerTimeout() but before the blocking kernel call.
wcstol(), wcstoll(), wcstoul(), wcstoull()
These functions are declared in <wchar.h>, not <stdlib.h>.