util/arg_string.h: set_arg_string

Convenience function to set x="y" style arguments.

Issue #1861
This commit is contained in:
Emery Hemingway 2016-01-23 19:20:06 +01:00 committed by Christian Helmuth
parent 23c1d4c66d
commit 723d9e7784
1 changed files with 19 additions and 3 deletions

View File

@ -277,14 +277,17 @@ class Genode::Arg_string
* Add new argument
*/
static bool add_arg(char *args, unsigned args_len,
const char *key, const char *value)
const char *key, const char *value,
Token::Type type = Token::Type::IDENT)
{
if (!args || !key || !value) return false;
unsigned old_len = strlen(args);
/* check if args string has enough capacity */
if (old_len + strlen(key) + strlen(value) + 2 > args_len)
if ((type == Token::Type::STRING
&& old_len + strlen(key) + strlen(value) + 4 > args_len)
|| (old_len + strlen(key) + strlen(value) + 2 > args_len))
return false;
args += old_len;
@ -292,7 +295,10 @@ class Genode::Arg_string
if (old_len)
args = _append(args, ", ");
_append(_append(_append(args, key), "="), value);
if (type == Token::Type::STRING)
_append(_append(_append(_append(args, key), "=\""), value), "\"");
else
_append(_append(_append(args, key), "="), value);
return true;
}
@ -316,6 +322,16 @@ class Genode::Arg_string
snprintf(buf, sizeof(buf), "%d", value);
return remove_arg(args, key) && add_arg(args, args_len, key, buf);
}
/**
* Assign new string argument
*/
static bool set_arg_string(char *args, unsigned args_len,
const char *key, const char *value)
{
return remove_arg(args, key)
&& add_arg(args, args_len, key, value, Token::Type::STRING);
}
};
#endif /* _INCLUDE__UTIL__ARG_STRING_H_ */