libc.h (1765B)
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 15typedef unsigned long size_t; 16typedef 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{ 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 34static 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 47static 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 70static 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 81static 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 89#endif