videomodes: Add helper functions to parse video-mode env-var extra options
Add 2 helper functions to get strings, respectively integers from the options value returned by video_get_video_mode() / video_get_ctfb_res_modes(). Signed-off-by: Hans de Goede <hdegoede@redhat.com> Acked-by: Anatolij Gustschin <agust@denx.de>
This commit is contained in:
parent
e976b868f2
commit
eb3c0cf806
|
@ -113,7 +113,7 @@ const struct ctfb_res_modes res_mode_init[RES_MODES_COUNT] = {
|
|||
* returns the length to the next seperator
|
||||
*/
|
||||
static int
|
||||
video_get_param_len (char *start, char sep)
|
||||
video_get_param_len(const char *start, char sep)
|
||||
{
|
||||
int i = 0;
|
||||
while ((*start != 0) && (*start != sep)) {
|
||||
|
@ -315,3 +315,61 @@ void video_get_ctfb_res_modes(int default_mode, unsigned int default_depth,
|
|||
xres, yres, depth, refresh, (*mode_ret)->xres,
|
||||
(*mode_ret)->yres, *depth_ret, (*mode_ret)->refresh);
|
||||
}
|
||||
|
||||
/*
|
||||
* Find the named string option within the ',' separated options string, and
|
||||
* store its value in dest.
|
||||
*
|
||||
* @options: ',' separated options string
|
||||
* @name: name of the option to look for
|
||||
* @dest: destination buffer to store the value of the option in
|
||||
* @dest_len: length of dest
|
||||
* @def: value to store in dest if the option is not present in options
|
||||
*/
|
||||
void video_get_option_string(const char *options, const char *name,
|
||||
char *dest, int dest_len, const char *def)
|
||||
{
|
||||
const char *p = options;
|
||||
const int name_len = strlen(name);
|
||||
int i, len;
|
||||
|
||||
while (p && (i = video_get_param_len(p, ',')) != 0) {
|
||||
if (strncmp(p, name, name_len) == 0 && p[name_len] == '=') {
|
||||
len = i - (name_len + 1);
|
||||
if (len >= dest_len)
|
||||
len = dest_len - 1;
|
||||
memcpy(dest, &p[name_len + 1], len);
|
||||
dest[len] = 0;
|
||||
return;
|
||||
}
|
||||
p += i;
|
||||
if (*p != 0)
|
||||
p++; /* skip ',' */
|
||||
}
|
||||
strcpy(dest, def);
|
||||
}
|
||||
|
||||
/*
|
||||
* Find the named integer option within the ',' separated options string, and
|
||||
* return its value.
|
||||
*
|
||||
* @options: ',' separated options string
|
||||
* @name: name of the option to look for
|
||||
* @def: value to return if the option is not present in options
|
||||
*/
|
||||
int video_get_option_int(const char *options, const char *name, int def)
|
||||
{
|
||||
const char *p = options;
|
||||
const int name_len = strlen(name);
|
||||
int i;
|
||||
|
||||
while (p && (i = video_get_param_len(p, ',')) != 0) {
|
||||
if (strncmp(p, name, name_len) == 0 && p[name_len] == '=')
|
||||
return simple_strtoul(&p[name_len + 1], NULL, 10);
|
||||
|
||||
p += i;
|
||||
if (*p != 0)
|
||||
p++; /* skip ',' */
|
||||
}
|
||||
return def;
|
||||
}
|
||||
|
|
|
@ -84,3 +84,8 @@ void video_get_ctfb_res_modes(int default_mode, unsigned int default_depth,
|
|||
const struct ctfb_res_modes **mode_ret,
|
||||
unsigned int *depth_ret,
|
||||
const char **options);
|
||||
|
||||
void video_get_option_string(const char *options, const char *name,
|
||||
char *dest, int dest_len, const char *def);
|
||||
|
||||
int video_get_option_int(const char *options, const char *name, int def);
|
||||
|
|
Loading…
Reference in New Issue