utString utString::substr(const size_type start, size_type len_orig) const { utString s; size_type len = strlen(p); if (len_orig == npos) { len_orig = len - start; } if (start > len) { abort(); } if (len > len_orig) { len = len_orig; } lmSafeFree(NULL, s.p); s.p = malloc_never_null(len + 1); memcpy(s.p, p + start, len); s.p[len] = '\0'; return s; }
static char *strdup_never_null(const char *s) { const size_t len = strlen(s) + 1; char *p = malloc_never_null(len); memcpy(p, s, len); return p; }
static char *strdup_never_null(const char *s) { const size_t len = (s == NULL ? 0 : strlen(s)) + 1; char *p = malloc_never_null(len); if (len > 1) memcpy(p, s, len); p[len-1] = 0; return p; }
/** * Allocates memory for the copy the string at the same time sets "this->allocated". * @param s * @return */ char* String::strdup_never_null(const char* s) { const size_t len = strlen(s)+1; char *p2 = malloc_never_null(len); memcpy(p2, s, len); allocated_=len; size_=len-1; return p2; }
String::String(const String& s) : p(0) { if( &s != NULL ){ p = malloc_never_null( s.size_ + 1 ); // copy only used part allocated_ = s.size_ + 1; size_ = s.size_; memcpy(p, s.p, size_ + 1); } _return_value = '\0'; }