Skip to content

Commit

Permalink
nuttx/libs/libc: add regex implementation
Browse files Browse the repository at this point in the history
add regex implementation for libc, the implementation are ported from
musl project

Signed-off-by: guoshichao <guoshichao@xiaomi.com>
  • Loading branch information
guoshichao committed May 16, 2023
1 parent 5c3fa2d commit b87340a
Show file tree
Hide file tree
Showing 10 changed files with 6,021 additions and 0 deletions.
104 changes: 104 additions & 0 deletions include/regex.h
@@ -0,0 +1,104 @@
/****************************************************************************
* include/regex.h
*
* regex.h - TRE POSIX compatible regex compilation functions.
*
* Copyright (c) 2001-2009 Ville Laurikari <vl@iki.fi>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/

#ifndef _INCLUDE_REGEX_H
#define _INCLUDE_REGEX_H

/****************************************************************************
* Included Files
****************************************************************************/

#include <sys/types.h>

#define regoff_t int

typedef struct re_pattern_buffer
{
size_t re_nsub;
void *__opaque;
void *__padding[4];
size_t __nsub2;
char __padding2;
} regex_t;

typedef struct
{
regoff_t rm_so;
regoff_t rm_eo;
} regmatch_t;

#define RE_DUP_MAX 255

#define REG_EXTENDED 1
#define REG_ICASE 2
#define REG_NEWLINE 4
#define REG_NOSUB 8

#define REG_NOTBOL 1
#define REG_NOTEOL 2

#define REG_OK 0
#define REG_NOMATCH 1
#define REG_BADPAT 2
#define REG_ECOLLATE 3
#define REG_ECTYPE 4
#define REG_EESCAPE 5
#define REG_ESUBREG 6
#define REG_EBRACK 7
#define REG_EPAREN 8
#define REG_EBRACE 9
#define REG_BADBR 10
#define REG_ERANGE 11
#define REG_ESPACE 12
#define REG_BADRPT 13

#define REG_ENOSYS -1

#ifdef __cplusplus
extern "C"
{
#endif

int regcomp(regex_t *__restrict, const char *__restrict, int);

int regexec(const regex_t * __restrict, const char *__restrict, size_t,
regmatch_t *__restrict, int);
void regfree(regex_t *);

size_t regerror(int, const regex_t *__restrict, char *__restrict, size_t);

#ifdef __cplusplus
}
#endif

#endif /* _INCLUDE_REGEX_H */
1 change: 1 addition & 0 deletions libs/libc/Kconfig
Expand Up @@ -29,3 +29,4 @@ source "libs/libc/userfs/Kconfig"
source "libs/libc/builtin/Kconfig"
source "libs/libc/symtab/Kconfig"
source "libs/libc/stream/Kconfig"
source "libs/libc/regex/Kconfig"
1 change: 1 addition & 0 deletions libs/libc/Makefile
Expand Up @@ -45,6 +45,7 @@ include obstack/Make.defs
include pthread/Make.defs
include pwd/Make.defs
include queue/Make.defs
include regex/Make.defs
include sched/Make.defs
include semaphore/Make.defs
include signal/Make.defs
Expand Down
10 changes: 10 additions & 0 deletions libs/libc/regex/Kconfig
@@ -0,0 +1,10 @@
#
# For a description of the syntax of this configuration file,
# see the file kconfig-language.txt in the NuttX tools repository.
#

config LIBC_REGEX
bool "Enable regex"
default n
---help---
provide the regex related func, include regcomp, regexec.
30 changes: 30 additions & 0 deletions libs/libc/regex/Make.defs
@@ -0,0 +1,30 @@
############################################################################
# libs/libc/regex/Make.defs
#
# 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.
#
############################################################################

ifeq ($(CONFIG_LIBC_REGEX),y)

# Add the regex C files to the build
CSRCS += regcomp.c regexec.c regerror.c tre-mem.c

# Add the regex directory to the build
DEPPATH += --dep-path regex
VPATH += :regex

endif

0 comments on commit b87340a

Please sign in to comment.