]> Git Repo - qemu.git/blame - pc-bios/s390-ccw/libc.c
qapi/misc.json: Remove superfluous words in CpuModelExpansionType
[qemu.git] / pc-bios / s390-ccw / libc.c
CommitLineData
fc0e2087
CW
1/*
2 * libc-style definitions and functions
3 *
4 * Copyright 2018 IBM Corp.
5 * Author(s): Collin L. Walling <[email protected]>
6 *
7 * This code is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2 of the License, or (at your
10 * option) any later version.
11 */
12
13#include "libc.h"
14#include "s390-ccw.h"
15
16/**
17 * atoui:
18 * @str: the string to be converted.
19 *
20 * Given a string @str, convert it to an integer. Leading spaces are
21 * ignored. Any other non-numerical value will terminate the conversion
22 * and return 0. This function only handles numbers between 0 and
23 * UINT64_MAX inclusive.
24 *
25 * Returns: an integer converted from the string @str, or the number 0
26 * if an error occurred.
27 */
28uint64_t atoui(const char *str)
29{
30 int val = 0;
31
32 if (!str || !str[0]) {
33 return 0;
34 }
35
36 while (*str == ' ') {
37 str++;
38 }
39
40 while (*str) {
41 if (!isdigit(*str)) {
42 break;
43 }
44 val = val * 10 + *str - '0';
45 str++;
46 }
47
48 return val;
49}
50
51/**
52 * uitoa:
53 * @num: an integer (base 10) to be converted.
54 * @str: a pointer to a string to store the conversion.
55 * @len: the length of the passed string.
56 *
57 * Given an integer @num, convert it to a string. The string @str must be
58 * allocated beforehand. The resulting string will be null terminated and
59 * returned. This function only handles numbers between 0 and UINT64_MAX
60 * inclusive.
61 *
62 * Returns: the string @str of the converted integer @num
63 */
64char *uitoa(uint64_t num, char *str, size_t len)
65{
e4f86962 66 long num_idx = 1; /* account for NUL */
fc0e2087
CW
67 uint64_t tmp = num;
68
69 IPL_assert(str != NULL, "uitoa: no space allocated to store string");
70
71 /* Count indices of num */
72 while ((tmp /= 10) != 0) {
73 num_idx++;
74 }
75
76 /* Check if we have enough space for num and NUL */
77 IPL_assert(len > num_idx, "uitoa: array too small for conversion");
78
79 str[num_idx--] = '\0';
80
81 /* Convert int to string */
82 while (num_idx >= 0) {
83 str[num_idx--] = num % 10 + '0';
84 num /= 10;
85 }
86
87 return str;
88}
This page took 0.077096 seconds and 4 git commands to generate.