QNX Neutrino 6.2.1

New entries

dispatch_unblock()
Unblock all of the threads that are blocked on a dispatch handle
errno
Each thread in a multi-threaded program has its own error value in its thread local storage. No matter which thread you're in, you can simply refer to errno—it's defined in such a way that it refers to the correct variable for the thread. For more information, see "Local storage for private data" in the documentation for ThreadCreate().
pthread_attr_setschedpolicy().
Sporadic scheduling (SCHED_SPORADIC) is a new feature of QNX Neutrino 6.2.0.
sched_param
Structure of scheduling parameters
va_copy()
Make a copy of a variable argument list

Changed content

bind(), bindresvport()
These functions aren't cancellation points any more, because this conflicted with POSIX.
htonl(), htons(), inet_ntop(), inet_pton(), isfdtype(), ntohl(), ntohs()
These functions have been moved from libsocket to libc.

Errata

alphasort()
This function compares two directory entries; it doesn't sort an array of entries.
execlpe(), execvpe()
You can now execute a shell script.
fgetc(), fgetchar(), fgets(), fgetwc(), fgetws(), getc(), getc_unlocked(), getchar(), getchar_unlocked(), gets(), getw(), getwc(), getwchar()
Use feof() or ferror() to distinguish an end-of-file condition from an error.
fstat(), fstat64()
These functions return -1 if an error occurs.
iofunc_mmap(), iofunc_mmap_default()
These functions return a nonpositive value on success.
InterruptAttach(), InterruptAttachEvent()
You should always set _NTO_INTR_FLAGS_TRK_MSK.
mq_getattr(), mq_setattr()
The mq_flags member of the mq_attr structure applies to the message-queue description (i.e., locally), not to the queue as a whole.
mq_open()
Corrected the interpretation of the name argument.
MsgError(), MsgError_r()
If the error argument is EOK, the MsgSend*() call returns EOK; if error is any other value, the MsgSend*() call returns -1.
MsgSendPulse(), MsgSendPulse_r()
You can now send pulses across the network.

You can send a pulse to any process—not just to a process in the same process group—if your process has the appropriate permission.

name_open()
This function returns a nonnegative integer representing a side-channel connection ID, or -1 if an error occurred.
printf()
The exponent produced for the e and E formats is at least two digits long.

Clarified what happens if the format string includes invalid multibyte characters.

pthread_mutex_timedlock(), pthread_rwlock_timedrdlock(), pthread_rwlock_timedwrlock()
The timeout is based on the CLOCK_REALTIME clock.
_resmgr_ocb()
Corrected the name; see resmgr_ocb().
select()
This function and the associated macros are now defined in <sys/select.h>, instead of <sys/time.h> (which includes <sys/select.h>).
sem_open()
Corrected the interpretation of the sem_name argument.
sem_timedwait()
The timeout is based on the CLOCK_REALTIME clock.
send()
The list of errors now includes EPIPE.
shm_open()
Corrected the interpretation of the name argument.
sigaction()
Corrected the example (it isn't safe to call printf() in a signal handler).
spawn(), spawnl(), spawnle(), spawnlp(), spawnlpe(), spawnp(), spawnv(), spawnve(), spawnvp(), spawnvpe()
You can now execute a shell script.

The child process's tms_utime, tms_stime, tms_cutime, and tms_cstime are now calculated.

timer_create()
Don't use SIGEV_INTR or SIGEV_UNBLOCK for the event type.
vsnprintf()
Corrected the returned values.