olaf@20: /* olaf@20: * File: sstring.c olaf@20: * Author: olaf olaf@20: * olaf@20: * Created on 17. Juni 2010, 13:27 olaf@20: */ olaf@20: olaf@20: #include olaf@20: #include olaf@20: #include olaf@20: olaf@20: #include "string.h" olaf@20: olaf@20: sstr_t sstr (char *s) { olaf@20: sstr_t string; olaf@20: string.ptr = s; olaf@20: string.length = strlen(s); olaf@20: return string; olaf@20: } olaf@20: olaf@20: sstr_t sstrn (char *s, size_t n) { olaf@20: sstr_t string; olaf@20: string.ptr = s; olaf@20: string.length = n; olaf@20: return string; olaf@20: } olaf@20: olaf@20: size_t sstrnlen (size_t n, sstr_t s, ...) { olaf@20: va_list ap; olaf@20: size_t size = s.length; olaf@20: va_start(ap, s); olaf@20: olaf@20: for (int i=0;i= s.length || length < 0) { olaf@20: return s; olaf@20: } olaf@20: if (length > s.length-start) { olaf@20: length = s.length-start; olaf@20: } olaf@20: new_sstr.ptr = &s.ptr[start]; olaf@20: new_sstr.length = length; olaf@20: return new_sstr; olaf@20: } olaf@20: olaf@20: int sstrcmp(sstr_t s1, sstr_t s2) { olaf@20: return strncmp(s1.ptr, s2.ptr, s1.length>s2.length ? s2.length: s1.length); olaf@20: } olaf@20: olaf@20: sstr_t sstrdub(sstr_t s) { olaf@20: sstr_t newstring; olaf@20: newstring.ptr = malloc(s.length + 1); olaf@20: newstring.length = s.length; olaf@20: newstring.ptr[newstring.length] = 0; olaf@20: olaf@20: memcpy(newstring.ptr, s.ptr, s.length); olaf@20: olaf@20: return newstring; olaf@20: }