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