mirror of
https://github.com/genodelabs/genode.git
synced 2025-01-18 10:46:25 +00:00
parent
d884cf1a9a
commit
d9d65aa86b
@ -175,7 +175,7 @@ static int lookup_tid_by_client_socket(int sd)
|
||||
static Prefix_len prefix_len(name.sun_path);
|
||||
|
||||
unsigned tid = 0;
|
||||
if (Genode::ascii_to(name.sun_path + prefix_len.len, &tid) == 0) {
|
||||
if (Genode::ascii_to(name.sun_path + prefix_len.len, tid) == 0) {
|
||||
PRAW("Error: could not parse tid number");
|
||||
return -1;
|
||||
}
|
||||
|
@ -83,7 +83,7 @@ class Genode::Arg
|
||||
|
||||
/* read numeric value and skip the corresponding tokens */
|
||||
Number_of_bytes value;
|
||||
size_t n = ascii_to(t.start(), &value);
|
||||
size_t n = ascii_to(t.start(), value);
|
||||
|
||||
if (n == 0)
|
||||
return false;
|
||||
|
@ -27,7 +27,7 @@ namespace Genode {
|
||||
|
||||
|
||||
/**
|
||||
* Wrapper of 'size_t' for selecting 'ascii_to' specialization
|
||||
* Wrapper of 'size_t' for selecting the 'ascii_to' function to parse byte values
|
||||
*/
|
||||
class Genode::Number_of_bytes
|
||||
{
|
||||
@ -266,8 +266,18 @@ namespace Genode {
|
||||
|
||||
/**
|
||||
* Read unsigned long value from string
|
||||
*
|
||||
* \param s source string
|
||||
* \param result destination variable
|
||||
* \param base integer base
|
||||
* \return number of consumed characters
|
||||
*
|
||||
* If the base argument is 0, the integer base is detected based on the
|
||||
* characters in front of the number. If the number is prefixed with "0x",
|
||||
* a base of 16 is used, otherwise a base of 10.
|
||||
*/
|
||||
inline size_t ascii_to(const char *s, unsigned long *result, unsigned base = 0)
|
||||
inline size_t ascii_to_unsigned_long(const char *s, unsigned long &result,
|
||||
unsigned base)
|
||||
{
|
||||
unsigned long i = 0, value = 0;
|
||||
|
||||
@ -294,27 +304,42 @@ namespace Genode {
|
||||
value = value*base + d;
|
||||
}
|
||||
|
||||
*result = value;
|
||||
result = value;
|
||||
return i;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Read unsigned int value from string
|
||||
* Read unsigned long value from string
|
||||
*
|
||||
* \return number of consumed characters
|
||||
*/
|
||||
inline size_t ascii_to(const char *s, unsigned int *result, unsigned base = 10)
|
||||
inline size_t ascii_to(const char *s, unsigned long &result)
|
||||
{
|
||||
return ascii_to_unsigned_long(s, result, 0);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Read unsigned int value from string
|
||||
*
|
||||
* \return number of consumed characters
|
||||
*/
|
||||
inline size_t ascii_to(const char *s, unsigned int &result)
|
||||
{
|
||||
unsigned long result_long = 0;
|
||||
size_t ret = ascii_to(s, &result_long, base);
|
||||
*result = result_long;
|
||||
size_t ret = ascii_to_unsigned_long(s, result_long, 0);
|
||||
result = result_long;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Read signed long value from string
|
||||
*
|
||||
* \return number of consumed characters
|
||||
*/
|
||||
inline size_t ascii_to(const char *s, long *result, unsigned base = 10)
|
||||
inline size_t ascii_to(const char *s, long &result)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
@ -326,11 +351,11 @@ namespace Genode {
|
||||
int j = 0;
|
||||
unsigned long value = 0;
|
||||
|
||||
j = ascii_to(s, &value, base);
|
||||
j = ascii_to_unsigned_long(s, value, 10);
|
||||
|
||||
if (!j) return i;
|
||||
|
||||
*result = sign*value;
|
||||
result = sign*value;
|
||||
return i + j;
|
||||
}
|
||||
|
||||
@ -340,13 +365,15 @@ namespace Genode {
|
||||
*
|
||||
* This function scales the resulting size value according to the suffixes
|
||||
* for G (2^30), M (2^20), and K (2^10) if present.
|
||||
*
|
||||
* \return number of consumed characters
|
||||
*/
|
||||
inline size_t ascii_to(const char *s, Number_of_bytes *result, unsigned base = 0)
|
||||
inline size_t ascii_to(const char *s, Number_of_bytes &result)
|
||||
{
|
||||
unsigned long res = 0;
|
||||
|
||||
/* convert numeric part of string */
|
||||
int i = ascii_to(s, &res, 0);
|
||||
int i = ascii_to_unsigned_long(s, res, 0);
|
||||
|
||||
/* handle suffixes */
|
||||
if (i > 0)
|
||||
@ -357,15 +384,17 @@ namespace Genode {
|
||||
default: break;
|
||||
}
|
||||
|
||||
*result = res;
|
||||
result = res;
|
||||
return i;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Read double float value from string
|
||||
*
|
||||
* \return number of consumed characters
|
||||
*/
|
||||
inline size_t ascii_to(const char *s, double *result, unsigned base = 0)
|
||||
inline size_t ascii_to(const char *s, double &result)
|
||||
{
|
||||
double v = 0.0; /* decimal part */
|
||||
double d = 0.1; /* power of fractional digit */
|
||||
@ -383,7 +412,7 @@ namespace Genode {
|
||||
|
||||
/* if no fractional part exists, return current value */
|
||||
if (s[i] != '.') {
|
||||
*result = neg ? -v : v;
|
||||
result = neg ? -v : v;
|
||||
return i;
|
||||
}
|
||||
|
||||
@ -394,7 +423,7 @@ namespace Genode {
|
||||
for (; s[i] && is_digit(s[i]); i++, d *= 0.1)
|
||||
v += d*digit(s[i], false);
|
||||
|
||||
*result = neg ? -v : v;
|
||||
result = neg ? -v : v;
|
||||
return i;
|
||||
}
|
||||
|
||||
|
@ -142,7 +142,11 @@ char *getenv(const char *name)
|
||||
long int strtol(const char *nptr, char **endptr, int base)
|
||||
{
|
||||
long res = 0;
|
||||
Genode::ascii_to<long>(nptr, &res, base);
|
||||
if (base != 0 && base != 10) {
|
||||
PERR("strtol: base of %d is not supported", base);
|
||||
return 0;
|
||||
}
|
||||
Genode::ascii_to(nptr, res);
|
||||
return res;
|
||||
}
|
||||
|
||||
@ -150,7 +154,7 @@ long int strtol(const char *nptr, char **endptr, int base)
|
||||
double strtod(const char *nptr, char **endptr)
|
||||
{
|
||||
double res = 0;
|
||||
Genode::ascii_to<double>(nptr, &res, 0);
|
||||
Genode::ascii_to(nptr, res);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
@ -15,9 +15,9 @@
|
||||
#include <base/snprintf.h>
|
||||
#include <nic_session/nic_session.h>
|
||||
#include <cap_session/connection.h>
|
||||
#include <os/config.h>
|
||||
#include <nic/xml_node.h>
|
||||
#include <util/xml_node.h>
|
||||
#include <os/config.h>
|
||||
|
||||
#include <extern_c_begin.h>
|
||||
#include <lx_emul.h>
|
||||
|
@ -1034,7 +1034,7 @@ int dev_set_name(struct device *dev, const char *fmt, ...)
|
||||
int strict_strtoul(const char *s, unsigned int base, unsigned long *res)
|
||||
{
|
||||
unsigned long r = -EINVAL;
|
||||
Genode::ascii_to<unsigned long>(s, &r, base);
|
||||
Genode::ascii_to_unsigned_long(s, r, base);
|
||||
*res = r;
|
||||
|
||||
return r;
|
||||
|
@ -16,6 +16,6 @@
|
||||
extern "C" long atol(const char *nptr)
|
||||
{
|
||||
long result = 0;
|
||||
Genode::ascii_to(nptr, &result);
|
||||
Genode::ascii_to(nptr, result);
|
||||
return result;
|
||||
}
|
||||
|
@ -17,7 +17,7 @@ extern "C" double strtod(const char *nptr, char **endptr)
|
||||
{
|
||||
double value = 0;
|
||||
|
||||
int num_chars = Genode::ascii_to(nptr, &value);
|
||||
int num_chars = Genode::ascii_to(nptr, value);
|
||||
|
||||
if (endptr)
|
||||
*endptr = (char *)(nptr + num_chars);
|
||||
|
@ -12,17 +12,21 @@
|
||||
*/
|
||||
|
||||
#include <util/string.h>
|
||||
#include <base/printf.h>
|
||||
|
||||
using namespace Genode;
|
||||
|
||||
extern "C" long int strtol(const char *nptr, char **endptr, int base)
|
||||
{
|
||||
long num_chars, result = 0;
|
||||
using namespace Genode;
|
||||
|
||||
if (base == 0)
|
||||
num_chars = ascii_to(nptr, &result);
|
||||
else
|
||||
num_chars = ascii_to(nptr, &result, base);
|
||||
long result = 0;
|
||||
|
||||
if (base != 0 && base != 10) {
|
||||
PERR("strtol: base of %d not supported", base);
|
||||
return 0;
|
||||
}
|
||||
|
||||
long const num_chars = ascii_to(nptr, result);
|
||||
|
||||
if (endptr)
|
||||
*endptr = (char *)(nptr + num_chars);
|
||||
|
@ -127,7 +127,7 @@ Genode::size_t Http::read_header()
|
||||
continue;
|
||||
|
||||
if (count) {
|
||||
ascii_to(t.start(), &_http_ret);
|
||||
ascii_to(t.start(), _http_ret);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -154,7 +154,7 @@ void Http::get_capacity()
|
||||
}
|
||||
|
||||
if (key) {
|
||||
ascii_to(t.start(), &_size);
|
||||
ascii_to(t.start(), _size);
|
||||
|
||||
if (verbose)
|
||||
PDBG("File size: %zu bytes", _size);
|
||||
|
@ -242,7 +242,7 @@ struct Wm::Decorator_nitpicker_session : Genode::Rpc_object<Nitpicker::Session>
|
||||
case Command::OP_TITLE:
|
||||
{
|
||||
unsigned long id = 0;
|
||||
Genode::ascii_to(cmd.title.title.string(), &id);
|
||||
Genode::ascii_to(cmd.title.title.string(), id);
|
||||
|
||||
if (id > 0)
|
||||
_content_registry.insert(cmd.title.view,
|
||||
|
@ -23,9 +23,7 @@ namespace Genode {
|
||||
/**
|
||||
* Convert ASCII string to mac address
|
||||
*/
|
||||
template <>
|
||||
inline size_t ascii_to<Nic::Mac_address>(char const *s,
|
||||
Nic::Mac_address* mac, unsigned)
|
||||
inline size_t ascii_to(char const *s, Nic::Mac_address &mac)
|
||||
{
|
||||
enum {
|
||||
HEX = true,
|
||||
@ -47,7 +45,7 @@ namespace Genode {
|
||||
mac_str[i] = (digit(s[hi], HEX) << 4) | digit(s[lo], HEX);
|
||||
}
|
||||
|
||||
Genode::memcpy(mac->addr, mac_str, MAC_SIZE);
|
||||
Genode::memcpy(mac.addr, mac_str, MAC_SIZE);
|
||||
|
||||
return MAC_CHAR_LEN;
|
||||
}
|
||||
|
@ -19,7 +19,7 @@
|
||||
namespace Genode {
|
||||
struct Color;
|
||||
|
||||
inline size_t ascii_to(const char *, Color *, unsigned base = 0);
|
||||
inline size_t ascii_to(const char *, Color &);
|
||||
}
|
||||
|
||||
|
||||
@ -45,7 +45,7 @@ struct Genode::Color
|
||||
* \return number of consumed characters, or 0 if the string contains
|
||||
* no valid color
|
||||
*/
|
||||
inline Genode::size_t Genode::ascii_to(const char *s, Genode::Color *result, unsigned)
|
||||
inline Genode::size_t Genode::ascii_to(const char *s, Genode::Color &result)
|
||||
{
|
||||
/* validate string */
|
||||
if (strlen(s) < 7 || *s != '#') return 0;
|
||||
@ -59,7 +59,7 @@ inline Genode::size_t Genode::ascii_to(const char *s, Genode::Color *result, uns
|
||||
green = 16*digit(s[3], HEX) + digit(s[4], HEX),
|
||||
blue = 16*digit(s[5], HEX) + digit(s[6], HEX);
|
||||
|
||||
*result = Color(red, green, blue);
|
||||
result = Color(red, green, blue);
|
||||
return 7;
|
||||
}
|
||||
|
||||
|
@ -161,7 +161,7 @@ class Genode::Xml_attribute
|
||||
* the length, we have to consider both the starting
|
||||
* and the trailing quote character.
|
||||
*/
|
||||
return ascii_to(_value.start() + 1, out) == _value.len() - 2;
|
||||
return ascii_to(_value.start() + 1, *out) == _value.len() - 2;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -557,7 +557,7 @@ class Genode::Xml_node
|
||||
*/
|
||||
template <typename T>
|
||||
bool value(T *out) const {
|
||||
return ascii_to(content_addr(), out) == content_size(); }
|
||||
return ascii_to(content_addr(), *out) == content_size(); }
|
||||
|
||||
/**
|
||||
* Return begin of node including the start tag
|
||||
|
@ -69,7 +69,7 @@ class Vfs::Tar_file_system : public File_system
|
||||
strncpy(buf, field, sizeof(buf));
|
||||
|
||||
unsigned long value = 0;
|
||||
ascii_to(buf, &value, 8);
|
||||
Genode::ascii_to_unsigned_long(buf, value, 8);
|
||||
return value;
|
||||
}
|
||||
|
||||
|
@ -76,7 +76,7 @@ class Command_line
|
||||
bool parameter(char const *tag, T &result)
|
||||
{
|
||||
Token value = _value_token(tag);
|
||||
return value && Genode::ascii_to(value.start(), &result) != 0;
|
||||
return value && Genode::ascii_to(value.start(), result) != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -38,7 +38,7 @@ struct Cpufreq_command : Command
|
||||
}
|
||||
|
||||
unsigned long f = 0;
|
||||
Genode::ascii_to(freq, &f, 10);
|
||||
Genode::ascii_to(freq, f);
|
||||
tprintf(terminal, "set frequency to %ld Hz\n", f);
|
||||
regulator.level(f);
|
||||
}
|
||||
|
@ -26,8 +26,8 @@
|
||||
#include <base/sleep.h>
|
||||
#include <cap_session/connection.h>
|
||||
#include <nic/component.h>
|
||||
#include <os/config.h>
|
||||
#include <nic/xml_node.h>
|
||||
#include <os/config.h>
|
||||
|
||||
/* Linux */
|
||||
#include <errno.h>
|
||||
|
@ -43,7 +43,7 @@ Ipv4_packet::Ipv4_address Ipv4_packet::ip_from_string(const char *ip)
|
||||
t.string(tmpstr, sizeof(tmpstr));
|
||||
|
||||
unsigned long tmpc = 0;
|
||||
Genode::ascii_to(tmpstr, &tmpc, 10);
|
||||
Genode::ascii_to(tmpstr, tmpc);
|
||||
ipb[cnt] = tmpc & 0xFF;
|
||||
t = t.next();
|
||||
|
||||
|
@ -47,7 +47,7 @@ namespace File_system {
|
||||
strncpy(buf, field, sizeof(buf));
|
||||
|
||||
unsigned long value = 0;
|
||||
ascii_to(buf, &value, 8);
|
||||
ascii_to_unsigned_long(buf, value, 8);
|
||||
return value;
|
||||
}
|
||||
|
||||
|
@ -79,8 +79,8 @@ class Rom_session_component : public Genode::Rpc_object<Genode::Rom_session>
|
||||
while (block_id < block_cnt) {
|
||||
|
||||
unsigned long file_size = 0;
|
||||
Genode::ascii_to(_tar_addr + block_id*_BLOCK_LEN + _FIELD_SIZE_LEN,
|
||||
&file_size, 8);
|
||||
Genode::ascii_to_unsigned_long(_tar_addr + block_id*_BLOCK_LEN + _FIELD_SIZE_LEN,
|
||||
file_size, 8);
|
||||
|
||||
/* get name of tar record */
|
||||
char const *record_filename = _tar_addr + block_id*_BLOCK_LEN;
|
||||
|
@ -270,7 +270,7 @@ namespace File_system {
|
||||
/* account for \n when reading from the file */
|
||||
_length += 1;
|
||||
|
||||
ascii_to(_content, &tmp, 10);
|
||||
ascii_to(_content, tmp);
|
||||
|
||||
_size = _check_size_limit(tmp);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user