You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by gn...@apache.org on 2020/11/21 13:01:21 UTC

[incubator-nuttx] 02/02: libc: implement getopt_long partially

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

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

commit 759b63d4be43916fd963a6ab3d2d55e2776459b0
Author: Xiang Xiao <xi...@xiaomi.com>
AuthorDate: Tue Nov 17 09:27:01 2020 -0800

    libc: implement getopt_long partially
    
    only the short option is supported now
    
    Signed-off-by: Xiang Xiao <xi...@xiaomi.com>
---
 include/getopt.h              | 76 +++++++++++++++++++++++++++++++++++++++++++
 libs/libc/unistd/lib_getopt.c | 10 +++++-
 2 files changed, 85 insertions(+), 1 deletion(-)

diff --git a/include/getopt.h b/include/getopt.h
new file mode 100644
index 0000000..1687206
--- /dev/null
+++ b/include/getopt.h
@@ -0,0 +1,76 @@
+/****************************************************************************
+ * include/getopt.h
+ *
+ * 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.
+ *
+ ****************************************************************************/
+
+#ifndef __INCLUDE_GETOPT_H
+#define __INCLUDE_GETOPT_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+#include <nuttx/compiler.h>
+
+#include <unistd.h>
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+#define no_argument             0
+#define required_argument       1
+#define optional_argument       2
+
+/****************************************************************************
+ * Public Type Definitions
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C"
+{
+#else
+#define EXTERN extern
+#endif
+
+struct option
+{
+  FAR const char *name;
+  int has_arg;
+  FAR int *flag;
+  int val;
+};
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+int getopt_long(int argc, FAR char *const argv[],
+                FAR const char *shortopts,
+                FAR const struct option *longopts,
+                FAR int *longind);
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __INCLUDE_GETOPT_H */
diff --git a/libs/libc/unistd/lib_getopt.c b/libs/libc/unistd/lib_getopt.c
index 56e1afe..4600a71 100644
--- a/libs/libc/unistd/lib_getopt.c
+++ b/libs/libc/unistd/lib_getopt.c
@@ -40,7 +40,7 @@
 #include <nuttx/config.h>
 
 #include <stdbool.h>
-#include <unistd.h>
+#include <getopt.h>
 #include <string.h>
 
 /****************************************************************************
@@ -294,3 +294,11 @@ int getopt(int argc, FAR char * const argv[], FAR const char *optstring)
   g_binitialized = false;
   return ERROR;
 }
+
+int getopt_long(int argc, FAR char *const argv[],
+                FAR const char *shortopts,
+                FAR const struct option *longopts,
+                FAR int *longind)
+{
+  return getopt(argc, argv, shortopts);
+}