From 34788417b44044b9d62238dab8d66de2b30879de Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Wed, 5 Aug 2009 20:16:28 +0000 Subject: [PATCH] 2009-08-05 Joel Sherrill * libmisc/bspcmdline/bspcmdline.h, libmisc/bspcmdline/bspcmdline_get.c, libmisc/bspcmdline/bspcmdline_getparam.c, libmisc/bspcmdline/bspcmdline_getparamraw.c, libmisc/bspcmdline/bspcmdline_getparamrhs.c: New files. Missed in previous commit. --- cpukit/ChangeLog | 8 ++ cpukit/libmisc/bspcmdline/bspcmdline.h | 127 ++++++++++++++++++ cpukit/libmisc/bspcmdline/bspcmdline_get.c | 19 +++ .../libmisc/bspcmdline/bspcmdline_getparam.c | 67 +++++++++ .../bspcmdline/bspcmdline_getparamraw.c | 33 +++++ .../bspcmdline/bspcmdline_getparamrhs.c | 42 ++++++ 6 files changed, 296 insertions(+) create mode 100644 cpukit/libmisc/bspcmdline/bspcmdline.h create mode 100644 cpukit/libmisc/bspcmdline/bspcmdline_get.c create mode 100644 cpukit/libmisc/bspcmdline/bspcmdline_getparam.c create mode 100644 cpukit/libmisc/bspcmdline/bspcmdline_getparamraw.c create mode 100644 cpukit/libmisc/bspcmdline/bspcmdline_getparamrhs.c diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index 6fcf2bda88..974483f8a0 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -1,3 +1,11 @@ +2009-08-05 Joel Sherrill + + * libmisc/bspcmdline/bspcmdline.h, libmisc/bspcmdline/bspcmdline_get.c, + libmisc/bspcmdline/bspcmdline_getparam.c, + libmisc/bspcmdline/bspcmdline_getparamraw.c, + libmisc/bspcmdline/bspcmdline_getparamrhs.c: New files. + Missed in previous commit. + 2009-08-05 Joel Sherrill * Makefile.am, preinstall.am, libmisc/Makefile.am, wrapup/Makefile.am: diff --git a/cpukit/libmisc/bspcmdline/bspcmdline.h b/cpukit/libmisc/bspcmdline/bspcmdline.h new file mode 100644 index 0000000000..a32933ffaf --- /dev/null +++ b/cpukit/libmisc/bspcmdline/bspcmdline.h @@ -0,0 +1,127 @@ +/** + * @file rtems/bspcmdline.h + * + * This include file contains all prototypes and specifications + * related to the BSP Command Line String and associated helper + * routines. The helpers are useful for locating command line + * type arguments (e.g. --mode) and their associated right + * hand side (e.g. FAST in --mode=FAST). + */ + +/* + * COPYRIGHT (c) 1989-2009. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#ifndef __BSP_COMMAND_LINE_h +#define __BSP_COMMAND_LINE_h + +/** + * @defgroup BSPCommandLine BSP Command Line Helpers + * + * The BSP Command Line Handler provides a set of routines which assist + * in examining and decoding the Command Line String passed to the BSP + * at boot time. + */ +/**@{*/ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/** + * @brief Obtain Pointer to BSP Boot Command String + * + * This method returns a pointer to the BSP Boot Command String. It + * is as likely to be NULL as point to a string as most BSPs do not + * have a start environment that provides a boot string. + * + * @return This method returns the pointer to the BSP Boot Command String. + */ +const char *bsp_cmdline_get(void); + +/** + * @brief Obtain COPY of the Entire Matching Argument + * + * This method searches for the argument @a name in the BSP Boot Command + * String and returns a copy of the entire string associated with it in + * @a value up to a string of @a length. This will include the argument + * and any right hand side portion of the string. For example, one might + * be returned --mode=FAST if + * searching for --mode. + * + * @param[in] name is the arugment to search for + * @param[in] value points to where the contents will + * be placed if located. + * @param[in] length is the maximum length to copy + * + * @return This method returns NULL if not found and + * @a value if found. + */ +const char *bsp_cmdline_get_param( + const char *name, + char *value, + size_t length +); + + +/** + * @brief Obtain COPY of the Right Hand Side of the Matching Argument + * + * This method searches for the argument @a name in + * the BSP Boot Command String and returns the right hand side + * associated with it in @a value up to a maximum string @a length. + * This will NOT include the argument but only any right hand side + * portion of the string. * For example, one might be returned FAST if + * searching for --mode. + * + * @param[in] name is the arugment to search for + * @param[in] value points to where the contents will + * be placed if located. + * @param[in] length is the maximum length to copy + * + * @return This method returns NULL if not found and + * @a value if found. + */ +const char *bsp_cmdline_get_param_rhs( + const char *name, + char *value, + size_t length +); + +/** + * @brief Obtain Pointer to the Entire Matching Argument + * + * This method searches for the argument @a name in + * the BSP Boot Command String and returns a pointer to the + * entire string associated with it. This will include the + * argument and any right hand side portion of the string. + * For example, one might be returned --mode=FAST if + * searching for --mode. + * + * @param[in] name is the arugment to search for + * + * @return This method returns NULL if not found and a pointer + * into the BSP Boot Command String if found. + * + * @note The pointer will be to the original BSP Command + * Line string. Exercise caution when using this. + */ +const char *bsp_cmdline_get_param_raw( + const char *name +); + +#ifdef __cplusplus +} +#endif + +/**@}*/ +#endif diff --git a/cpukit/libmisc/bspcmdline/bspcmdline_get.c b/cpukit/libmisc/bspcmdline/bspcmdline_get.c new file mode 100644 index 0000000000..cb088c8e1e --- /dev/null +++ b/cpukit/libmisc/bspcmdline/bspcmdline_get.c @@ -0,0 +1,19 @@ +/* + * COPYRIGHT (c) 1989-2009. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#include + +extern const char *bsp_boot_cmdline; + +const char *bsp_cmdline_get(void) +{ + return bsp_boot_cmdline; +} diff --git a/cpukit/libmisc/bspcmdline/bspcmdline_getparam.c b/cpukit/libmisc/bspcmdline/bspcmdline_getparam.c new file mode 100644 index 0000000000..0df08c91d7 --- /dev/null +++ b/cpukit/libmisc/bspcmdline/bspcmdline_getparam.c @@ -0,0 +1,67 @@ +/* + * COPYRIGHT (c) 1989-2009. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#include + +#include + +static void copy_string( + const char *start, + char *value, + size_t length +) +{ + int i; + int quotes; + const char *p = start; + + quotes=0; + for (i=0 ; *p && i + +#include + +extern const char *bsp_boot_cmdline; + +const char *bsp_cmdline_get_param_raw( + const char *name +) +{ + const char *p; + + if ( !name ) + return NULL; + + if ( !bsp_boot_cmdline ) + return NULL; + + p = strstr(bsp_boot_cmdline, name); + /* printf( "raw: %p (%s)\n", p, p ); */ + return p; +} diff --git a/cpukit/libmisc/bspcmdline/bspcmdline_getparamrhs.c b/cpukit/libmisc/bspcmdline/bspcmdline_getparamrhs.c new file mode 100644 index 0000000000..2f96cfb02d --- /dev/null +++ b/cpukit/libmisc/bspcmdline/bspcmdline_getparamrhs.c @@ -0,0 +1,42 @@ +/* + * COPYRIGHT (c) 1989-2009. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#include + +const char *bsp_cmdline_get_param_rhs( + const char *name, + char *value, + size_t length +) +{ + const char *p; + const char *rhs; + char *d; + + p = bsp_cmdline_get_param( name, value, length ); + if ( !p ) + return NULL; + + rhs = &p[strlen(name)]; + if ( *rhs != '=' ) + return NULL; + + rhs++; + if ( *rhs == '\"' ) + rhs++; + for ( d=value ; *rhs ; ) + *d++ = *rhs++; + if ( *(d-1) == '\"' ) + d--; + *d = '\0'; + + return value; +}