summaryrefslogtreecommitdiff
path: root/nuttx
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-02-03 16:41:28 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-02-03 16:41:28 +0000
commit13ff49d906592afcec0c170572411693c8e26d13 (patch)
tree361e13367ebb2e709a262417905d9c3ea346f545 /nuttx
parent16166e4a5ea25f9c01784a11162de92156b5b872 (diff)
downloadpx4-nuttx-13ff49d906592afcec0c170572411693c8e26d13.tar.gz
px4-nuttx-13ff49d906592afcec0c170572411693c8e26d13.tar.bz2
px4-nuttx-13ff49d906592afcec0c170572411693c8e26d13.zip
Add strcasestr()
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4364 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx')
-rw-r--r--nuttx/ChangeLog1
-rw-r--r--nuttx/TODO14
-rw-r--r--nuttx/configs/mcu123-lpc214x/README.txt7
-rw-r--r--nuttx/include/string.h53
-rw-r--r--nuttx/lib/string/Make.defs2
-rw-r--r--nuttx/lib/string/lib_strcasestr.c134
6 files changed, 170 insertions, 41 deletions
diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog
index 3dc5d697f..2612ed4d1 100644
--- a/nuttx/ChangeLog
+++ b/nuttx/ChangeLog
@@ -2442,4 +2442,5 @@
console (only a Telnet console) and SDIO is enabled. This configuration is
required because the STM3240G-EVAL board cannot simultaneously support
RS-232 and SDIO due to pin conflicts.
+ * lib/string/strcasestr.c: Add strcasestr().
diff --git a/nuttx/TODO b/nuttx/TODO
index 056548d4b..09e24221f 100644
--- a/nuttx/TODO
+++ b/nuttx/TODO
@@ -1,4 +1,4 @@
-NuttX TODO List (Last updated February 1, 2012)
+NuttX TODO List (Last updated February 2, 2012)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This file summarizes known NuttX bugs, limitations, inconsistencies with
@@ -45,7 +45,7 @@ nuttx/
apps/
(5) Network Utilities (apps/netutils/)
- (5) NuttShell (NSH) (apps/nshlib)
+ (4) NuttShell (NSH) (apps/nshlib)
(1) System libraries apps/system (apps/system)
(5) Other Applications & Tests (apps/examples/)
@@ -1015,7 +1015,7 @@ o ARM/LPC214x (arch/arm/src/lpc214x/)
Description: I tried to bring up the new configuration at configs/mcu123-214x/composite,
and Linux failed to enumerate the device. I don't know if this is
a problem with the lpc214x USB driver (bit rot), or due to recent
- changed (e.g., -r3170 is suspicious), or an incompatibility between the
+ changed (e.g., -r4359 is suspicious), or an incompatibility between the
Composite driver and the LPC214x USB driver. It will take more work
to find out which -- like checking if the other USB configurations are
also broken.
@@ -1544,14 +1544,6 @@ o Network Utilities (apps/netutils/)
o NuttShell (NSH) (apps/nshlib)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- Title: EACH TCP PACKET CAUSES PROMPT
- Description: When the telnetd front end is received, each TCP packet
- received causes a prompt (nsh >) to be presented. The
- prompt should only be presented when the user enters a
- carriage return.
- Status: Open
- Priority: Low
-
Title: WGET UNTESTED
Description: The wget command has been incorporated into NSH, however
it is still untested as of this writing (only because I
diff --git a/nuttx/configs/mcu123-lpc214x/README.txt b/nuttx/configs/mcu123-lpc214x/README.txt
index 9b7cee4bf..a05b239e6 100644
--- a/nuttx/configs/mcu123-lpc214x/README.txt
+++ b/nuttx/configs/mcu123-lpc214x/README.txt
@@ -351,7 +351,8 @@ composite:
Output format: ELF and Intel HEX
NOTE: I could not get this to work! Perhaps this is a
- consequence of the last USB driver checking (r3170)
+ consequence of the last USB driver checking (r4359). But
+ backing this change out did not fix the configuration.
nsh:
----
@@ -382,7 +383,7 @@ usbserial:
Output format: ELF and binary
NOTE: If you have problems with this configurationt, perhaps it is a
- consequence of the last USB driver checking (r3170)
+ consequence of the last USB driver checking (r4359)
usbstorage:
-----------
@@ -395,4 +396,4 @@ usbstorage:
Output format: ELF and binary
NOTE: If you have problems with this configurationt, perhaps it is a
- consequence of the last USB driver checking (r3170)
+ consequence of the last USB driver checking (r4359)
diff --git a/nuttx/include/string.h b/nuttx/include/string.h
index 0fbf996cd..5cc8d7962 100644
--- a/nuttx/include/string.h
+++ b/nuttx/include/string.h
@@ -60,33 +60,34 @@ extern "C" {
#define EXTERN extern
#endif
-EXTERN char *strchr(const char *s, int c);
-EXTERN FAR char *strdup(const char *s);
-EXTERN FAR char *strndup(FAR const char *s, size_t size);
-EXTERN const char *strerror(int);
-EXTERN size_t strlen(const char *);
-EXTERN size_t strnlen(const char *, size_t);
-EXTERN char *strcat(char *, const char *);
-EXTERN char *strncat(char *, const char *, size_t);
-EXTERN int strcmp(const char *, const char *);
-EXTERN int strncmp(const char *, const char *, size_t);
-EXTERN int strcasecmp(const char *, const char *);
-EXTERN int strncasecmp(const char *, const char *, size_t);
-EXTERN char *strcpy(char *dest, const char *src);
-EXTERN char *strncpy(char *, const char *, size_t);
-EXTERN char *strpbrk(const char *, const char *);
-EXTERN char *strchr(const char *, int);
-EXTERN char *strrchr(const char *, int);
-EXTERN size_t strspn(const char *, const char *);
-EXTERN size_t strcspn(const char *, const char *);
-EXTERN char *strstr(const char *, const char *);
-EXTERN char *strtok(char *, const char *);
-EXTERN char *strtok_r(char *, const char *, char **);
+EXTERN FAR char *strchr(FAR const char *s, int c);
+EXTERN FAR char *strdup(FAR const char *s);
+EXTERN FAR char *strndup(FAR const char *s, size_t size);
+EXTERN FAR const char *strerror(int);
+EXTERN size_t strlen(FAR const char *);
+EXTERN size_t strnlen(FAR const char *, size_t);
+EXTERN FAR char *strcat(FAR char *, FAR const char *);
+EXTERN FAR char *strncat(FAR char *, FAR const char *, size_t);
+EXTERN int strcmp(FAR const char *, FAR const char *);
+EXTERN int strncmp(FAR const char *, FAR const char *, size_t);
+EXTERN int strcasecmp(FAR const char *, FAR const char *);
+EXTERN int strncasecmp(FAR const char *, FAR const char *, size_t);
+EXTERN FAR char *strcpy(char *dest, FAR const char *src);
+EXTERN FAR char *strncpy(char *, FAR const char *, size_t);
+EXTERN FAR char *strpbrk(FAR const char *, FAR const char *);
+EXTERN FAR char *strchr(FAR const char *, int);
+EXTERN FAR char *strrchr(FAR const char *, int);
+EXTERN size_t strspn(FAR const char *, FAR const char *);
+EXTERN size_t strcspn(FAR const char *, FAR const char *);
+EXTERN FAR char *strstr(FAR const char *, FAR const char *);
+EXTERN FAR char *strcasestr(FAR const char *, FAR const char *);
+EXTERN FAR char *strtok(FAR char *, FAR const char *);
+EXTERN FAR char *strtok_r(FAR char *, FAR const char *, FAR char **);
-EXTERN void *memset(void *s, int c, size_t n);
-EXTERN void *memcpy(void *dest, const void *src, size_t n);
-EXTERN int memcmp(const void *s1, const void *s2, size_t n);
-EXTERN void *memmove(void *dest, const void *src, size_t count);
+EXTERN FAR void *memset(FAR void *s, int c, size_t n);
+EXTERN FAR void *memcpy(FAR void *dest, FAR const void *src, size_t n);
+EXTERN int memcmp(FAR const void *s1, FAR const void *s2, size_t n);
+EXTERN FAR void *memmove(FAR void *dest, FAR const void *src, size_t count);
#ifndef CONFIG_ARCH_BZERO
# define bzero(s,n) (void)memset(s,0,n)
diff --git a/nuttx/lib/string/Make.defs b/nuttx/lib/string/Make.defs
index d3f1eed3a..246b05381 100644
--- a/nuttx/lib/string/Make.defs
+++ b/nuttx/lib/string/Make.defs
@@ -38,6 +38,6 @@ STRING_SRCS = lib_checkbase.c lib_isbasedigit.c lib_memset.c lib_memcpy.c \
lib_strcat.c lib_strchr.c lib_strcpy.c lib_strcmp.c lib_strcspn.c \
lib_strdup.c lib_strerror.c lib_strlen.c lib_strnlen.c \
lib_strncasecmp.c lib_strncat.c lib_strncmp.c lib_strncpy.c \
- lib_strndup.c lib_strpbrk.c lib_strrchr.c lib_strspn.c \
+ lib_strndup.c lib_strcasestr.c lib_strpbrk.c lib_strrchr.c lib_strspn.c \
lib_strstr.c lib_strtok.c lib_strtokr.c lib_strtol.c lib_strtoll.c \
lib_strtoul.c lib_strtoull.c lib_strtod.c
diff --git a/nuttx/lib/string/lib_strcasestr.c b/nuttx/lib/string/lib_strcasestr.c
new file mode 100644
index 000000000..23f0ab57e
--- /dev/null
+++ b/nuttx/lib/string/lib_strcasestr.c
@@ -0,0 +1,134 @@
+/****************************************************************************
+ * lib/string/lib_strstr.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use str 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 str binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer str
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 OWNER 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.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <string.h>
+#include <ctype.h>
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+static FAR char *strcasechr(FAR const char *s, int uc)
+{
+ register char ch;
+
+ if (s)
+ {
+ for (; *s; s++)
+ {
+ ch = *s;
+ if (toupper(ch) == uc)
+ {
+ return (FAR char*)s;
+ }
+ }
+ }
+
+ return NULL;
+}
+
+/****************************************************************************
+ * Global Functions
+ ****************************************************************************/
+
+FAR char *strcasestr(FAR const char *str, FAR const char *substr)
+{
+ const char *candidate; /* Candidate in str with matching start character */
+ char ch; /* First character of the substring */
+ int len; /* The length of the substring */
+
+ /* Special case the empty substring */
+
+ len = strlen(substr);
+ ch = *substr;
+
+ if (!ch)
+ {
+ /* We'll say that an empty substring matches at the beginning of
+ * the string
+ */
+
+ return (char*)str;
+ }
+
+ /* Search for the substring */
+
+ candidate = str;
+ ch = toupper(ch);
+
+ for (;;)
+ {
+ /* strcasechr() will return a pointer to the next occurrence of the
+ * character ch in the string (ignoring case)
+ */
+
+ candidate = strcasechr(candidate, ch);
+ if (!candidate || strlen(candidate) < len)
+ {
+ /* First character of the substring does not appear in the string
+ * or the remainder of the string is not long enough to contain the
+ * substring.
+ */
+
+ return NULL;
+ }
+
+ /* Check if this is the beginning of a matching substring (ignoring case) */
+
+ if (strncasecmp(candidate, substr, len) == 0)
+ {
+ /* Yes.. return the pointer to the first occurrence of the matching
+ * substring.
+ */
+
+ return (char*)candidate;
+ }
+
+ /* No, find the next candidate after this one */
+
+ candidate++;
+ }
+
+ /* Won't get here, but some compilers might complain */
+
+ return NULL;
+}
+