#ifndef FPROTO_HH
#define FPROTO_HH
+#include "flower-config.hh"
+
template<class T> struct Array;
template<class T> struct sstack;
template<class T,class K> struct Assoc;
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);
+
+#ifndef HAVE_MEMMEM // GNU extension.
+char *memmem(const Byte * haystack, int haystack_len,
+ const Byte *needle, int needle_len);
+#endif HAVE_MEMMEM
+
+#ifndef HAVE_SNPRINTF // GNU extension.
+int snprintf (char *str, size_t n,
+ const char *format, ... );
+#endif
+
+
Byte *memrchr(const Byte * p, int n, char c);
-Byte*strrev( Byte* byte_l, int length_i );
+Byte *strrev( Byte* byte_l, int length_i );
#endif // LIBC_EXTENSION_HH
int i1 = s1.length_i();
int i2 = s2.length_i();
- int i = i1 <? i2;
- int result= memcmp( p1, p2, i );
+ int result= memcmp( p1, p2, i1 <? i2 );
return result ? result : i1-i2;
}
String::index_i( String searchfor ) const
{
char const* me = strh_.ch_c_l();
- char const* p = (char const *) memmem(me, length_i(), searchfor.ch_c_l(),
- searchfor.length_i());
+ char const* p = (char const *) memmem(
+ me, length_i(), searchfor.ch_c_l(), searchfor.length_i());
if ( p )
return p - me;
String
String::mid_str( int index_i, int n ) const
{
+ if (index_i <0) {
+ n += index_i;
+ index_i=0;
+ }
+
if ( !length_i() || ( index_i < 0 ) || ( index_i >= length_i() ) || ( n < 1 ) )
return String();