xref: /qemu/pc-bios/s390-ccw/libc.h (revision abff1abf)
1 /*
2  * libc-style definitions and functions
3  *
4  * Copyright (c) 2013 Alexander Graf <agraf@suse.de>
5  *
6  * This code is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU General Public License as published by the
8  * Free Software Foundation; either version 2 of the License, or (at your
9  * option) any later version.
10  */
11 
12 #ifndef S390_CCW_LIBC_H
13 #define S390_CCW_LIBC_H
14 
15 typedef unsigned long      size_t;
16 typedef int                bool;
17 typedef unsigned char      uint8_t;
18 typedef unsigned short     uint16_t;
19 typedef unsigned int       uint32_t;
20 typedef unsigned long long uint64_t;
21 
22 static inline void *memset(void *s, int c, size_t n)
23 {
24     size_t i;
25     unsigned char *p = s;
26 
27     for (i = 0; i < n; i++) {
28         p[i] = c;
29     }
30 
31     return s;
32 }
33 
34 static inline void *memcpy(void *s1, const void *s2, size_t n)
35 {
36     uint8_t *dest = s1;
37     const uint8_t *src = s2;
38     size_t i;
39 
40     for (i = 0; i < n; i++) {
41         dest[i] = src[i];
42     }
43 
44     return s1;
45 }
46 
47 static inline int memcmp(const void *s1, const void *s2, size_t n)
48 {
49     size_t i;
50     const uint8_t *p1 = s1, *p2 = s2;
51 
52     for (i = 0; i < n; i++) {
53         if (p1[i] != p2[i]) {
54             return p1[i] > p2[i] ? 1 : -1;
55         }
56     }
57 
58     return 0;
59 }
60 
61 static inline size_t strlen(const char *str)
62 {
63     size_t i;
64     for (i = 0; *str; i++) {
65         str++;
66     }
67     return i;
68 }
69 
70 static inline char *strcat(char *dest, const char *src)
71 {
72     int i;
73     char *dest_end = dest + strlen(dest);
74 
75     for (i = 0; i <= strlen(src); i++) {
76         dest_end[i] = src[i];
77     }
78     return dest;
79 }
80 
81 static inline int isdigit(int c)
82 {
83     return (c >= '0') && (c <= '9');
84 }
85 
86 uint64_t atoui(const char *str);
87 char *uitoa(uint64_t num, char *str, size_t len);
88 
89 #endif
90