tron@2186: /* $Id$ */ tron@2186: tron@1317: #include "stdafx.h" tron@1317: #include "string.h" tron@1317: tron@2234: #include tron@2234: tron@1317: void ttd_strlcat(char *dst, const char *src, size_t size) tron@1317: { tron@1317: assert(size > 0); tron@1317: for (; size > 0 && *dst != '\0'; --size, ++dst) {} tron@1317: assert(size > 0); tron@1317: while (--size > 0 && *src != '\0') *dst++ = *src++; tron@1317: *dst = '\0'; tron@1317: } tron@1317: tron@1317: tron@1317: void ttd_strlcpy(char *dst, const char *src, size_t size) tron@1317: { tron@1317: assert(size > 0); tron@1317: while (--size > 0 && *src != '\0') *dst++ = *src++; tron@1317: *dst = '\0'; tron@1317: } tron@1317: tron@1317: tron@1317: char* strecat(char* dst, const char* src, const char* last) tron@1317: { tron@1317: assert(last == NULL || dst <= last); tron@1317: for (; *dst != '\0'; ++dst) tron@1317: if (dst == last) return dst; tron@1317: for (; *src != '\0' && dst != last; ++dst, ++src) *dst = *src; tron@1317: *dst = '\0'; tron@1317: return strecpy(dst, src, last); tron@1317: } tron@1317: tron@1317: tron@1317: char* strecpy(char* dst, const char* src, const char* last) tron@1317: { tron@1317: assert(last == NULL || dst <= last); tron@1317: for (; *src != '\0' && dst != last; ++dst, ++src) *dst = *src; tron@1317: *dst = '\0'; tron@1317: return dst; tron@1317: } tron@2234: tron@2234: tron@2234: char* CDECL str_fmt(const char* str, ...) tron@2234: { tron@2234: char buf[4096]; tron@2234: va_list va; tron@2234: int len; tron@2234: char* p; tron@2234: tron@2234: va_start(va, str); tron@2234: len = vsprintf(buf, str, va); tron@2234: va_end(va); tron@2234: p = malloc(len + 1); tron@2234: if (p != NULL) memcpy(p, buf, len + 1); tron@2234: return p; tron@2234: } Darkvater@2775: Darkvater@2775: void str_validate(char *str) Darkvater@2775: { Darkvater@2775: for (; *str != '\0'; str++) Darkvater@2775: if (!IsValidAsciiChar(*str)) *str = '?'; Darkvater@2775: }