From 81947f33485e05bda3e64a7619834de7b03e93ff Mon Sep 17 00:00:00 2001 From: fred Date: Mon, 3 Mar 1997 14:10:31 +0000 Subject: [PATCH] flower-1.1.4 --- flower/libc-extension.cc | 98 ++++++++++++++++++++++++++++++++++++++++ flower/libc-extension.hh | 25 ++++++++++ 2 files changed, 123 insertions(+) create mode 100644 flower/libc-extension.cc create mode 100644 flower/libc-extension.hh diff --git a/flower/libc-extension.cc b/flower/libc-extension.cc new file mode 100644 index 0000000000..b663088d76 --- /dev/null +++ b/flower/libc-extension.cc @@ -0,0 +1,98 @@ +/* + libc-extension.cc -- implement some string.h extensions + + source file of the flowerlib + + (c) 1997 Han-Wen Nienhuys +*/ + +#include +#include +#include "libc-extension.hh" + +/* + compensate for lacking libc functions. + */ + char* +strnlwr( char* start_l ,int n) +{ + char * p = start_l + n; + while ( --p >= start_l) { + *p = tolower( *p ); /* a macro on some compilers */ + } + return start_l; +} + + char* +strnupr( char* start_l, int n) +{ + char * p = start_l + n; + while ( --p >= start_l) { + *p = toupper( *p ); /* a macro on some compilers */ + } + return start_l; +} + +/** locate a substring. #memmem# finds the first occurrence of + #needle# in #haystack# + */ + + char * +memmem(const Byte * haystack, const Byte *needle, + int haystack_len, int needle_len) +{ + const Byte * end_haystack = haystack + haystack_len - needle_len; + const Byte * end_needle = needle + needle_len ; + + /* Ahhh ... Some minimal lowlevel stuff. This *is* nice; Varation + is the spice of life */ + while (haystack < end_haystack) { + const Byte *subneedle_l = needle; + const Byte *subhaystack_l = haystack; + while (subneedle_l < end_needle) { + if (*subneedle_l++ != *subhaystack_l++) + goto next; // yeah. I should be prosecuted. + } + + // completed the needle. Gotcha. + return (char*) haystack; + next: + haystack++; + } + return 0; +} + +Byte * +memrchr(const Byte * p, int n, char c) +{ + const Byte * q = p+n; + while (q > p) { + if (*--q == c) + return (Byte*)q; + } + return 0; +} + + +template +inline void +my_swap(T &t1, T &t2, T &tmp) +{ + tmp = t1; + t1 = t2; + t2 = tmp; +} + +Byte* +strrev( Byte* byte_l, int length_i ) +{ + Byte tmp_byte; + + Byte* left_l = byte_l; + Byte* right_l = byte_l + length_i; + + while ( right_l > left_l ) { + my_swap(*right_l-- , *left_l++ , tmp_byte); + } + return byte_l; +} diff --git a/flower/libc-extension.hh b/flower/libc-extension.hh new file mode 100644 index 0000000000..e06feb5af4 --- /dev/null +++ b/flower/libc-extension.hh @@ -0,0 +1,25 @@ +/* + libc-extension.hh -- declare some string.h extensions + + source file of the flowerlib + + (c) 1997 Han-Wen Nienhuys +*/ + + +#ifndef LIBC_EXTENSION_HH +#define LIBC_EXTENSION_HH +#include "fproto.hh" + +char* strnlwr( char* start_l ,int n); +char* strnupr( char* start_l, int n); +/* + should use void* like in libc + */ +char *memmem(const Byte * haystack, const Byte *needle, + int haystack_len, int needle_len); +Byte *memrchr(const Byte * p, int n, char c); +Byte*strrev( Byte* byte_l, int length_i ); + + +#endif // LIBC_EXTENSION_HH -- 2.39.5