You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ag...@apache.org on 2020/06/23 16:35:13 UTC

[incubator-nuttx] branch master updated (f24c71b -> d24bd78)

This is an automated email from the ASF dual-hosted git repository.

aguettouche pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git.


    from f24c71b  include/ftw.h:  Add header file
     new 1e166f7  sysconf: Implement _SC_ATEXIT_MAX query
     new d24bd78  libc: Implement pathconf and fpathconf

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 include/unistd.h                |  34 ++++++++---
 libs/libc/unistd/Make.defs      |   2 +-
 libs/libc/unistd/lib_pathconf.c | 132 ++++++++++++++++++++++++++++++++++++++++
 libs/libc/unistd/lib_sysconf.c  |   8 +++
 4 files changed, 168 insertions(+), 8 deletions(-)
 create mode 100644 libs/libc/unistd/lib_pathconf.c


[incubator-nuttx] 02/02: libc: Implement pathconf and fpathconf

Posted by ag...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

aguettouche pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit d24bd782a9a773480e9ecd4fe0340b5a143996fb
Author: Xiang Xiao <xi...@xiaomi.com>
AuthorDate: Mon Jun 22 14:34:59 2020 +0800

    libc: Implement pathconf and fpathconf
    
    specified here:
    https://pubs.opengroup.org/onlinepubs/009695399/functions/fpathconf.html
    note: only _PC_PATH_MAX is handled now
    
    Signed-off-by: Xiang Xiao <xi...@xiaomi.com>
    Change-Id: Idd323dc10e8f31f10dd1fc64f467227808c11dbd
---
 include/unistd.h                |  28 ++++++++-
 libs/libc/unistd/Make.defs      |   2 +-
 libs/libc/unistd/lib_pathconf.c | 132 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 160 insertions(+), 2 deletions(-)

diff --git a/include/unistd.h b/include/unistd.h
index e51ab9f..1e3351e 100644
--- a/include/unistd.h
+++ b/include/unistd.h
@@ -103,7 +103,31 @@
 #undef  _POSIX_ASYNC_IO
 #undef  _POSIX_PRIO_IO
 
-/* Constants used with POSIX sysconf().  sysconf() will return -2 and set
+/* Constants used with POSIX pathconf().  pathconf() will return -1 and set
+ * errno to ENOSYS for most of these.
+ */
+
+#define _PC_2_SYMLINKS                   0x0001
+#define _PC_ALLOC_SIZE_MIN               0x0002
+#define _PC_ASYNC_IO                     0x0003
+#define _PC_CHOWN_RESTRICTED             0x0004
+#define _PC_FILESIZEBITS                 0x0005
+#define _PC_LINK_MAX                     0x0006
+#define _PC_MAX_CANON                    0x0007
+#define _PC_MAX_INPUT                    0x0008
+#define _PC_NAME_MAX                     0x0009
+#define _PC_NO_TRUNC                     0x000a
+#define _PC_PATH_MAX                     0x000b
+#define _PC_PIPE_BUF                     0x000c
+#define _PC_PRIO_IO                      0x000d
+#define _PC_REC_INCR_XFER_SIZE           0x000e
+#define _PC_REC_MIN_XFER_SIZE            0x000f
+#define _PC_REC_XFER_ALIGN               0x0010
+#define _PC_SYMLINK_MAX                  0x0011
+#define _PC_SYNC_IO                      0x0012
+#define _PC_VDISABLE                     0x0013
+
+/* Constants used with POSIX sysconf().  sysconf() will return -1 and set
  * errno to ENOSYS for most of these.
  */
 
@@ -365,6 +389,8 @@ int     sethostname(FAR const char *name, size_t size);
 /* Get configurable system variables */
 
 long    sysconf(int name);
+long    fpathconf(int fildes, int name);
+long    pathconf(FAR const char *path, int name);
 
 /* User and group identity management */
 
diff --git a/libs/libc/unistd/Make.defs b/libs/libc/unistd/Make.defs
index b3b2a82..760c3b7 100644
--- a/libs/libc/unistd/Make.defs
+++ b/libs/libc/unistd/Make.defs
@@ -35,7 +35,7 @@
 
 # Add the unistd C files to the build
 
-CSRCS += lib_access.c lib_daemon.c lib_swab.c lib_sysconf.c
+CSRCS += lib_access.c lib_daemon.c lib_swab.c lib_pathconf.c lib_sysconf.c
 CSRCS += lib_getopt.c lib_getoptargp.c lib_getoptindp.c lib_getoptoptp.c
 CSRCS += lib_alarm.c lib_sleep.c lib_usleep.c
 CSRCS += lib_seteuid.c lib_setegid.c lib_geteuid.c lib_getegid.c
diff --git a/libs/libc/unistd/lib_pathconf.c b/libs/libc/unistd/lib_pathconf.c
new file mode 100644
index 0000000..5b05a4f
--- /dev/null
+++ b/libs/libc/unistd/lib_pathconf.c
@@ -0,0 +1,132 @@
+/****************************************************************************
+ * libs/libc/unistd/lib_pathconf.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.  The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <unistd.h>
+#include <limits.h>
+#include <errno.h>
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: fpathconf/pathconf
+ *
+ * Description:
+ *   The fpathconf() and pathconf() functions shall determine the current
+ *   value of a configurable limit or option (variable) that is associated
+ *   with a file or directory.
+ *
+ *   For pathconf(), the path argument points to the pathname of a file or
+ *   directory.
+ *
+ *   For fpathconf(), the fildes argument is an open file descriptor.
+ *
+ *   The name argument represents the variable to be queried relative to that
+ *   file or directory. Implementations shall support all of the variables
+ *   listed in the following table and may support others. The variables in
+ *   the following table come from <limits.h> or <unistd.h> and the symbolic
+ *   constants, defined in <unistd.h>, are the corresponding values used for
+ *   name.
+ *
+ *     Variable                           Value of Name
+ *
+ *     {FILESIZEBITS}                     _PC_FILESIZEBITS
+ *     {LINK_MAX}                         _PC_LINK_MAX
+ *     {MAX_CANON}                        _PC_MAX_CANON
+ *     {MAX_INPUT}                        _PC_MAX_INPUT
+ *     {NAME_MAX}                         _PC_NAME_MAX
+ *     {PATH_MAX}                         _PC_PATH_MAX
+ *     {PIPE_BUF}                         _PC_PIPE_BUF
+ *     {POSIX2_SYMLINKS}                  _PC_2_SYMLINKS
+ *     {POSIX_ALLOC_SIZE_MIN}             _PC_ALLOC_SIZE_MIN
+ *     {POSIX_REC_INCR_XFER_SIZE}         _PC_REC_INCR_XFER_SIZE
+ *     {POSIX_REC_MAX_XFER_SIZE}          _PC_REC_MAX_XFER_SIZE
+ *     {POSIX_REC_MIN_XFER_SIZE}          _PC_REC_MIN_XFER_SIZE
+ *     {POSIX_REC_XFER_ALIGN}             _PC_REC_XFER_ALIGN
+ *     {SYMLINK_MAX}                      _PC_SYMLINK_MAX
+ *     _POSIX_CHOWN_RESTRICTED            _PC_CHOWN_RESTRICTED
+ *     _POSIX_NO_TRUNC                    _PC_NO_TRUNC
+ *     _POSIX_VDISABLE                    _PC_VDISABLE
+ *     _POSIX_ASYNC_IO                    _PC_ASYNC_IO
+ *     _POSIX_PRIO_IO                     _PC_PRIO_IO
+ *     _POSIX_SYNC_IO                     _PC_SYNC_IO
+ *
+ * Returned Value:
+ *   If name is an invalid value, both pathconf() and fpathconf() shall
+ *   return -1 and set errno to indicate the error.
+ *
+ *   If the variable corresponding to name has no limit for the path or file
+ *   descriptor, both pathconf() and fpathconf() shall return -1 without
+ *   changing errno. If the implementation needs to use path to determine the
+ *   value of name and the implementation does not support the association of
+ *   name with the file specified by path, or if the process did not have
+ *   appropriate privileges to query the file specified by path, or path does
+ *   not exist, pathconf() shall return -1 and set errno to indicate the
+ *   error.
+ *
+ *   If the implementation needs to use fildes to determine the value of name
+ *   and the implementation does not support the association of name with the
+ *   file specified by fildes, or if fildes is an invalid file descriptor,
+ *   fpathconf() shall return -1 and set errno to indicate the error.
+ *
+ *   Otherwise, pathconf() or fpathconf() shall return the current variable
+ *   value for the file or directory without changing errno. The value
+ *   returned shall not be more restrictive than the corresponding value
+ *   available to the application when it was compiled with the
+ *   implementation's <limits.h> or <unistd.h>.
+ *
+ *   If the variable corresponding to name is dependent on an unsupported
+ *   option, the results are unspecified.
+ *
+ ****************************************************************************/
+
+long fpathconf(int fildes, int name)
+{
+  /* NOTE:  The initialize implementation of this interface is very sparse.
+   * It was originally created to support only the functionality of libcxx
+   * but can be extended to support as much of the standard POSIX as is
+   * necessary.
+   */
+
+  switch (name)
+    {
+      case _PC_PATH_MAX:
+        return PATH_MAX;
+
+      default:
+
+        /* Assume valid but not implemented for the time being */
+
+        set_errno(ENOSYS);
+        return ERROR;
+    }
+}
+
+long pathconf(FAR const char *path, int name)
+{
+  return fpathconf(-1, name);
+}


[incubator-nuttx] 01/02: sysconf: Implement _SC_ATEXIT_MAX query

Posted by ag...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

aguettouche pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit 1e166f7ecbddc2e59005d9b17a967c57d7331a8a
Author: Xiang Xiao <xi...@xiaomi.com>
AuthorDate: Mon Jun 22 12:37:37 2020 +0800

    sysconf: Implement _SC_ATEXIT_MAX query
    
    and remove the incorrect macro ATEXIT_MAX
    
    Signed-off-by: Xiang Xiao <xi...@xiaomi.com>
    Change-Id: Ia5d7dafc50e942f62f95137313c34741c6dd60ba
---
 include/unistd.h               | 6 ------
 libs/libc/unistd/lib_sysconf.c | 8 ++++++++
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/include/unistd.h b/include/unistd.h
index 0d4283a..e51ab9f 100644
--- a/include/unistd.h
+++ b/include/unistd.h
@@ -48,12 +48,6 @@
  * Pre-processor Definitions
  ****************************************************************************/
 
-/* The number of functions that may be registered to be called
- * at program exit.
- */
-
-#define ATEXIT_MAX 1
-
 /* Values for seeking */
 
 #define SEEK_SET    0  /* From the start of the file */
diff --git a/libs/libc/unistd/lib_sysconf.c b/libs/libc/unistd/lib_sysconf.c
index 7f51d9e..c27acf7 100644
--- a/libs/libc/unistd/lib_sysconf.c
+++ b/libs/libc/unistd/lib_sysconf.c
@@ -41,6 +41,7 @@
 #include <nuttx/config.h>
 
 #include <unistd.h>
+#include <sched.h>
 #include <errno.h>
 
 /****************************************************************************
@@ -225,6 +226,13 @@ long sysconf(int name)
       case _SC_OPEN_MAX:
         return CONFIG_NFILE_DESCRIPTORS;
 
+      case _SC_ATEXIT_MAX:
+#ifdef CONFIG_SCHED_EXIT_MAX
+        return CONFIG_SCHED_EXIT_MAX;
+#else
+        return 0;
+#endif
+
       default:
 #if 0 /* Assume valid but not implemented for the time being */
         errcode = EINVAL;