Loading...
--- xnu/xnu-1228/libkern/c++/OSString.cpp
+++ xnu/xnu-2782.10.72/libkern/c++/OSString.cpp
@@ -87,6 +87,24 @@
return true;
}
+bool OSString::initWithStringOfLength(const char *cString, size_t inlength)
+{
+ if (!cString || !super::init())
+ return false;
+
+ length = inlength + 1;
+ string = (char *) kalloc(length);
+ if (!string)
+ return false;
+
+ bcopy(cString, string, inlength);
+ string[inlength] = 0;
+
+ ACCUMSIZE(length);
+
+ return true;
+}
+
bool OSString::initWithCStringNoCopy(const char *cString)
{
if (!cString || !super::init())
@@ -94,7 +112,7 @@
length = strlen(cString) + 1;
flags |= kOSStringNoCopy;
- string = (char *) cString;
+ string = const_cast<char *>(cString);
return true;
}
@@ -134,6 +152,20 @@
return me;
}
+
+OSString *OSString::withStringOfLength(const char *cString, size_t length)
+{
+ OSString *me = new OSString;
+
+ if (me && !me->initWithStringOfLength(cString, length)) {
+ me->release();
+ return 0;
+ }
+
+ return me;
+}
+
+
/* @@@ gvdl */
#if 0
@@ -208,7 +240,7 @@
bool OSString::isEqualTo(const char *aCString) const
{
- return strcmp(string, aCString) == 0;
+ return strncmp(string, aCString, length) == 0;
}
bool OSString::isEqualTo(const OSMetaClassBase *obj) const