blob: bcdc45732dd829c44dd2ad22c5acc7cbfcb76ade [file] [log] [blame]
Thomas Huth90806fe2017-07-12 14:49:43 +02001/*
2 * libc-style definitions and functions
3 *
Collin L. Wallingfc0e2082018-02-23 10:43:10 -05004 * Copyright (c) 2013 Alexander Graf <agraf@suse.de>
5 *
Thomas Huth90806fe2017-07-12 14:49:43 +02006 * 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
Thomas Huthe4f86962018-04-13 16:22:13 +020015typedef unsigned long size_t;
Thomas Huth90806fe2017-07-12 14:49:43 +020016typedef int bool;
17typedef unsigned char uint8_t;
18typedef unsigned short uint16_t;
19typedef unsigned int uint32_t;
20typedef unsigned long long uint64_t;
21
22static inline void *memset(void *s, int c, size_t n)
23{
Collin L. Wallingfc0e2082018-02-23 10:43:10 -050024 size_t i;
Thomas Huth90806fe2017-07-12 14:49:43 +020025 unsigned char *p = s;
26
27 for (i = 0; i < n; i++) {
28 p[i] = c;
29 }
30
31 return s;
32}
33
34static inline void *memcpy(void *s1, const void *s2, size_t n)
35{
36 uint8_t *dest = s1;
37 const uint8_t *src = s2;
Collin L. Wallingfc0e2082018-02-23 10:43:10 -050038 size_t i;
Thomas Huth90806fe2017-07-12 14:49:43 +020039
40 for (i = 0; i < n; i++) {
41 dest[i] = src[i];
42 }
43
44 return s1;
45}
46
Collin L. Wallingfc0e2082018-02-23 10:43:10 -050047static 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
61static 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
Jason J. Herne86c58702019-04-04 10:34:28 -040070static 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
Collin L. Wallingfc0e2082018-02-23 10:43:10 -050081static inline int isdigit(int c)
82{
83 return (c >= '0') && (c <= '9');
84}
85
86uint64_t atoui(const char *str);
87char *uitoa(uint64_t num, char *str, size_t len);
88
Thomas Huth90806fe2017-07-12 14:49:43 +020089#endif