diff --git a/repos/base/include/util/arg_string.h b/repos/base/include/util/arg_string.h index d9ae850c06..bf2235ad93 100644 --- a/repos/base/include/util/arg_string.h +++ b/repos/base/include/util/arg_string.h @@ -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_ */