From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hans de Goede Date: Mon, 22 Dec 2014 16:58:46 +0100 Subject: [U-Boot] [PATCH v2 05/11] videomodes: Add helper functions to parse video-mode env-var extra options In-Reply-To: <1419251715.26985.167.camel@hellion.org.uk> References: <1419009041-31057-1-git-send-email-hdegoede@redhat.com> <1419009041-31057-6-git-send-email-hdegoede@redhat.com> <1419251715.26985.167.camel@hellion.org.uk> Message-ID: <54983FB6.8000106@redhat.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi, On 22-12-14 13:35, Ian Campbell wrote: > On Fri, 2014-12-19 at 18:10 +0100, Hans de Goede wrote: >> Add 2 helper functions to get strings, reps. ints from the options value >> returned by video_get_video_mode() / video_get_ctfb_res_modes(). > > I can't quite parse this, what is "reps. ints"? Oops sorry, that should be resp. for respectively, so with the abbreviations dropped it should read: "Add 2 helper functions to get strings, respectively integers from the options value returned by video_get_video_mode() / video_get_ctfb_res_modes()." Which hopefully is more clear, I've fixed this in my personal tree. > Also, it's "separated" not "seperated" (throughout). I've also fixed this in my personal tree. Thanks & Regards, Hans > >> >> Signed-off-by: Hans de Goede >> --- >> drivers/video/videomodes.c | 60 +++++++++++++++++++++++++++++++++++++++++++++- >> drivers/video/videomodes.h | 5 ++++ >> 2 files changed, 64 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/video/videomodes.c b/drivers/video/videomodes.c >> index 72841fd..1f79d5f 100644 >> --- a/drivers/video/videomodes.c >> +++ b/drivers/video/videomodes.c >> @@ -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)) { >> @@ -313,3 +313,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 ',' seperated options string, and >> + * store its value in dest. >> + * >> + * @options: ',' seperated 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 ',' seperated options string, and >> + * return its value. >> + * >> + * @options: ',' seperated 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; >> +} >> diff --git a/drivers/video/videomodes.h b/drivers/video/videomodes.h >> index 02419cd..047b8a9 100644 >> --- a/drivers/video/videomodes.h >> +++ b/drivers/video/videomodes.h >> @@ -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); > >