I am sponsoring this fast-track case for myself.
Timeout is Wednesday, 08/04/2010
1. Introduction
This case adds 28 new functions to the C library, all in the
name of compatibility with GNU/Linux and FreeBSD.
The commitment level of these interfaces is Committed.
The release binding is "minor" so they can be implemented
in Solaris Next/11. If anyone wants to back-port any of
these functions to Solaris 10, they should file a separate
ARC case.
2. Discussion
2. Discussion
Over the last few years. there have been several bug reports
(RFEs) filed requesting such functions for Solaris:
6275498 Provide string compare functions wcscasecmp,wcsncasecmp
in solaris like linux
6421095 Solaris should provide strcasestr
6793969 RFE: Add|stpcpy|to libc
6960818 add get_nprocs(), getline(), strdupa(), strndup() to libc
This case goes beyond the bare requests in these bug reports
and provides generally-useful interfaces that are documented
in GNU/Linux/BSD manual pages.
In addition to existing in GNU/Linux/BSD manual pages, many
of these functions are also specified in the new POSIX standard:
IEEE Std 1003.1(TM)-2008
The Open Group Technical Standard
Base Specifications, Issue 7
hereinafter referred to as SUSv4.
3. Details
Unless stated otherwise, all of the following functions
are new functions being added to the C library.
Many of these functions are specified in the new POSIX standard:
IEEE Std 1003.1(TM)-2008
The Open Group Technical Standard
Base Specifications, Issue 7
hereinafter referred to as SUSv4.
Others are specified in GNU/Linux man pages or in
OpenBSD man pages, indicated on a case-by-case basis.
===========================================================
#include <string.h>
char *strndup(const char *, size_t);
char *stpcpy(char *restrict, const char *restrict);
char *stpncpy(char *restrict, const char *restrict, size_t);
char *strchrnul(const char *, int);
char *strdupa(const char *);
char *strndupa(const char *, size_t);
char *strnstr(const char *s1, const char *s2, size_t n);
char *strcasestr(const char *s1, const char *s2);
The strndup(), stpcpy() and stpncpy() functions are specified in SUSv4.
The strchrnul(). strdupa() and strndupa() functions are GNU/Linux
extensions.
The strnstr() and strcasestr() are FreeBSD extensions.
===========================================================
These two existing functions, previously ASCII-only,
become locale-dependent, as specified in SUSv4:
#include <string.h>
int strcasecmp(const char *s1, const char *s2)
int strncasecmp(const char *s1, const char *s2, size_t n)
===========================================================
#include <poll.h>
int ppoll(struct pollfd *restrict fds, nfds_t nfds,
const struct timespec *restrict timeout,
const sigset_t *restrict sigmask);
The ppoll() function is a GNU/Linux extension.
===========================================================
#include <stdio.h>
ssize_t getdelim(char **restrict, size_t *restrict,
int, FILE *restrict);
ssize_t getline(char **restrict, size_t *restrict,
FILE *restrict);
The getdelim() and getline() functions are specified in SUSv4.
===========================================================
#include <string.h>
void *memmem(const void *, size_t, const void *, size_t);
The memmem() function is a GNU/Linux and FreeBSD extension.
===========================================================
#include <stdio.h>
int fcloseall(void);
The fcloseall() function is a GNU/Linux and FreeBSD extension.
===========================================================
#include <stdlib.h>
int clearenv(void);
The clearenv() function is a GNU/Linux extension.
===========================================================
The semantics of the following existing function have
changed a bit, as specified in SUSv4:
#include <stdlib.h>
char *realpath(const char *file_name, char *resolved_name);
In particular, the semantics for 'resolved_name' being
passed in as a NULL pointer have changed.
Previously, this resulted in failure with errno == EINVAL.
Now, realpath() allocates a buffer using malloc():
If resolved_name is a null pointer, the generated pathname
shall be stored as a null-terminated string in a buffer
allocated as if by a call to malloc().
===========================================================
#include <stdlib.h>
char *canonicalize_file_name(const char *path);
The canonicalize_file_name() function is a GNU/Linux extension.
It is equivalent to realpath(path, NULL) (see above).
===========================================================
#include <string.h>
int ffsl(long);
int ffsll(long long);
int fls(int);
int flsl(long);
int flsll(long long);
These functions are FreeBSD extensions.
===========================================================
#include <wchar.h>
wchar_t *wcsdup(const wchar_t *);
size_t wcsnlen(const wchar_t *, size_t);
wchar_t *wcpcpy(wchar_t *restrict, const wchar_t *restrict);
wchar_t *wcpncpy(wchar_t *restrict, const wchar_t *restrict, size_t);
int wcscasecmp(const wchar_t *, const wchar_t *);
int wcsncasecmp(const wchar_t *, const wchar_t *, size_t);
These functions are specified in SUSv4.
===========================================================
int get_nprocs(void);
int get_nprocs_conf(void);
The get_nprocs() and get_nprocs_conf() are GNU/Linux extensions
equivalent, respectively, to:
sysconf(_SC_NPROCESSORS_ONLN);
sysconf(_SC_NPROCESSORS_CONF);
===========================================================
Since SUSv4 changes are being made to the system,
the following definitions are being added to <unistd.h>,
as specified in SUSv4, because these features already exist:
_POSIX_THREAD_ROBUST_PRIO_INHERIT
Implementation supports the Robust Mutex Priority Inheritance
option.
_POSIX_THREAD_ROBUST_PRIO_PROTECT
Implementation supports the Robust Mutex Priority Protection
option.
_SC_THREAD_ROBUST_PRIO_INHERIT
_SC_THREAD_ROBUST_PRIO_PROTECT
===========================================================
4. Manual pages.
New and modified manual pages will be created from the
SUSv4 POSIX specifications where the relevant functions
are defined therein, and from GNU/Linux and FreeBSD
manual pages otherwise.
_______________________________________________
opensolaris-arc mailing list
opensolaris-arc@opensolaris.org