1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/ucx/string.c Thu Jan 05 14:53:54 2012 +0100 1.3 @@ -0,0 +1,99 @@ 1.4 +/* 1.5 + * File: sstring.c 1.6 + * Author: olaf 1.7 + * 1.8 + * Created on 17. Juni 2010, 13:27 1.9 + */ 1.10 + 1.11 +#include <stdlib.h> 1.12 +#include <string.h> 1.13 +#include <stdarg.h> 1.14 + 1.15 +#include "string.h" 1.16 + 1.17 +sstr_t sstr (char *s) { 1.18 + sstr_t string; 1.19 + string.ptr = s; 1.20 + string.length = strlen(s); 1.21 + return string; 1.22 +} 1.23 + 1.24 +sstr_t sstrn (char *s, size_t n) { 1.25 + sstr_t string; 1.26 + string.ptr = s; 1.27 + string.length = n; 1.28 + return string; 1.29 +} 1.30 + 1.31 +size_t sstrnlen (size_t n, sstr_t s, ...) { 1.32 + va_list ap; 1.33 + size_t size = s.length; 1.34 + va_start(ap, s); 1.35 + 1.36 + for (int i=0;i<n-1;i++) { 1.37 + sstr_t str = va_arg(ap, sstr_t); 1.38 + size += str.length; 1.39 + } 1.40 + 1.41 + return size; 1.42 +} 1.43 + 1.44 +sstr_t sstrcat (sstr_t s, ...) { 1.45 + va_list ap; 1.46 + va_start(ap, s); 1.47 + s.ptr[0] = 0; 1.48 + 1.49 + sstr_t str = va_arg (ap, sstr_t); 1.50 + while (str.ptr != NULL) { 1.51 + s.ptr = strncat (s.ptr, str.ptr, s.length); 1.52 + str = va_arg (ap, sstr_t); 1.53 + } 1.54 + 1.55 + return s; 1.56 +} 1.57 + 1.58 +sstr_t sstrncat (size_t n, sstr_t s, sstr_t c1, ...) { 1.59 + va_list ap; 1.60 + va_start(ap, c1); 1.61 + s.ptr[0] = 0; 1.62 + 1.63 + s.ptr = strncat (s.ptr, c1.ptr, s.length); 1.64 + for (int i=0;i<n-1;i++) { 1.65 + sstr_t str = va_arg (ap, sstr_t); 1.66 + s.ptr = strncat (s.ptr, str.ptr, s.length); 1.67 + } 1.68 + 1.69 + return s; 1.70 +} 1.71 + 1.72 +sstr_t sstrsubs (sstr_t s, size_t start) { 1.73 + return sstrsubsl (s, start, s.length-start); 1.74 +} 1.75 + 1.76 +sstr_t sstrsubsl (sstr_t s, size_t start, size_t length) { 1.77 + sstr_t new_sstr; 1.78 + if (start < 0 || start >= s.length || length < 0) { 1.79 + return s; 1.80 + } 1.81 + if (length > s.length-start) { 1.82 + length = s.length-start; 1.83 + } 1.84 + new_sstr.ptr = &s.ptr[start]; 1.85 + new_sstr.length = length; 1.86 + return new_sstr; 1.87 +} 1.88 + 1.89 +int sstrcmp(sstr_t s1, sstr_t s2) { 1.90 + return strncmp(s1.ptr, s2.ptr, s1.length>s2.length ? s2.length: s1.length); 1.91 +} 1.92 + 1.93 +sstr_t sstrdub(sstr_t s) { 1.94 + sstr_t newstring; 1.95 + newstring.ptr = malloc(s.length + 1); 1.96 + newstring.length = s.length; 1.97 + newstring.ptr[newstring.length] = 0; 1.98 + 1.99 + memcpy(newstring.ptr, s.ptr, s.length); 1.100 + 1.101 + return newstring; 1.102 +}