#include "substr.h"
#include "globals.h"
+#ifndef HAVE_STRNDUP
+
+char *strndup(const char *str, size_t len)
+{
+ char * ret = (char*)malloc(len + 1);
+
+ memcpy(ret, str, len);
+ ret[len] = '\0';
+ return ret;
+}
+
+#endif
+
namespace re2c
{
return (bool) (s1.len == s2.len && memcmp(s1.str, s2.str, s1.len) == 0);
}
-Str::Str(const SubStr& s) : SubStr(new char[s.len], s.len)
+Str::Str(const SubStr& s) : SubStr(strndup(s.str, s.len), s.len)
{
- memcpy(str, s.str, s.len);
+ ;
}
Str::Str(Str& s) : SubStr(s.str, s.len)
Str::~Str()
{
- delete str;
+ free((void*)str);
str = (char*) - 1;
len = (uint) - 1;
}
{
public:
- char *str;
- uint len;
+ const char * str;
+ uint len;
public:
friend bool operator==(const SubStr &, const SubStr &);
- SubStr(uchar*, uint);
- SubStr(char*, uint);
- SubStr(char*);
+ SubStr(const uchar*, uint);
+ SubStr(const char*, uint);
+ SubStr(const char*);
SubStr(const SubStr&);
void out(std::ostream&) const;
std::string to_string() const
return o << *s;
}
-inline SubStr::SubStr(uchar *s, uint l)
+inline SubStr::SubStr(const uchar *s, uint l)
: str((char*) s), len(l)
{ }
-inline SubStr::SubStr(char *s, uint l)
+inline SubStr::SubStr(const char *s, uint l)
: str(s), len(l)
{ }
-inline SubStr::SubStr(char *s)
+inline SubStr::SubStr(const char *s)
: str(s), len(strlen(s))
{ }
} // end namespace re2c
+#ifndef HAVE_STRNDUP
+
+char *strndup(const char *str, size_t len);
+
+#endif
+
#endif