diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2009-08-05 20:16:28 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2009-08-05 20:16:28 +0000 |
commit | 34788417b44044b9d62238dab8d66de2b30879de (patch) | |
tree | 4639cba61d64a7f090967d2a50c30884c9505c57 /cpukit/libmisc/bspcmdline | |
parent | 2009-08-05 Joel Sherrill <joel.sherrill@oarcorp.com> (diff) | |
download | rtems-34788417b44044b9d62238dab8d66de2b30879de.tar.bz2 |
2009-08-05 Joel Sherrill <joel.sherrill@oarcorp.com>
* 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.
Diffstat (limited to 'cpukit/libmisc/bspcmdline')
-rw-r--r-- | cpukit/libmisc/bspcmdline/bspcmdline.h | 127 | ||||
-rw-r--r-- | cpukit/libmisc/bspcmdline/bspcmdline_get.c | 19 | ||||
-rw-r--r-- | cpukit/libmisc/bspcmdline/bspcmdline_getparam.c | 67 | ||||
-rw-r--r-- | cpukit/libmisc/bspcmdline/bspcmdline_getparamraw.c | 33 | ||||
-rw-r--r-- | cpukit/libmisc/bspcmdline/bspcmdline_getparamrhs.c | 42 |
5 files changed, 288 insertions, 0 deletions
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 <string.h> + +/** + * @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 <rtems/bspcmdline.h> + +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 <rtems/bspcmdline.h> + +#include <stdio.h> + +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<length-1; ) { + if ( *p == '\"' ) { + quotes++; + } else if ( ((quotes % 2) == 0) && *p == ' ' ) + break; + value[i++] = *p++; + value[i] = '\0'; + } + +} + +const char *bsp_cmdline_get_param( + const char *name, + char *value, + size_t length +) +{ + const char *p; + + if ( !name ) + return NULL; + + if ( !value ) + return NULL; + + if ( !length ) + return NULL; + + value[0] = '\0'; + + p = bsp_cmdline_get_param_raw( name ); + + if ( !p ) + return NULL; + + copy_string( p, value, length ); + + return value; +} + + diff --git a/cpukit/libmisc/bspcmdline/bspcmdline_getparamraw.c b/cpukit/libmisc/bspcmdline/bspcmdline_getparamraw.c new file mode 100644 index 0000000000..e0fb431c58 --- /dev/null +++ b/cpukit/libmisc/bspcmdline/bspcmdline_getparamraw.c @@ -0,0 +1,33 @@ +/* + * 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 <rtems/bspcmdline.h> + +#include <stdio.h> + +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 <rtems/bspcmdline.h> + +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; +} |