Handle<Value> TiFilesystemObject::_getFile(void* userContext, TiObject* , const Arguments& args)
{
	// Get the paths from the arguments
	QString path = "";
	for(int i = 0, len = args.Length(); i < len; i++) {
        String::Utf8Value v8UtfString(Handle<String>::Cast(args[i]));
        const char* cStr = *v8UtfString;
        path.append(cStr).append("/");
	}
	// remove the last "/"
	path.remove(path.length() - 1, 1);
	// in case there is double slashesh, remove them
	// Ti.Filesyste.getFile( Ti.Filestem.resourceDirectory, '/app.js')
	// or
	// Ti.Filesyste.getFile( Ti.Filestem.resourceDirectory, 'app.js')
	path.replace("//", "/");

    HandleScope handleScope;
    // Get the Filesystem object
    TiFilesystemObject* obj = (TiFilesystemObject*) userContext;
    Handle<ObjectTemplate> global = getObjectTemplateFromJsObject(args.Holder());
    Handle<Object> result = global->NewInstance();

    // Create a File object
    TiFilesystemFileObject* fileObject = new TiFilesystemFileObject(path);
    fileObject->setNativeObjectFactory(obj->_objectFactory);
    fileObject->setValue(result);

    // Return it
    setTiObjectToJsObject(result, fileObject);
    return handleScope.Close(result);
}
string TiObject::getSTDStringFromValue(Handle<Value> value)
{
    Handle<String> v8string = Handle<String>::Cast(value);
    String::Utf8Value v8UtfString(v8string);
    const char* cStr = *v8UtfString;
    return string(cStr);
}
int NativeBufferObject::setValue(TiObject* obj)
{
    Handle<Value> v8Value = obj->getValue();
    if (v8Value.IsEmpty())
    {
        return NATIVE_ERROR_INVALID_ARG;
    }
    if (v8Value->IsNumber() || v8Value->IsNumberObject())
    {
        if (v8Value->IsInt32() || v8Value->IsUint32())
        {
            Handle<Number> num = Handle<Number>::Cast(v8Value);
            int value = (int)num->Value();
            internalData_ = QByteArray::number(value);
        }
        else
        {
            Handle<Number> num = Handle<Number>::Cast(v8Value);
            double value = (double)num->Value();
            internalData_ = QByteArray::number(value);
        }
    }
    else if (v8Value->IsString() || v8Value->IsStringObject())
    {
        Handle<Value> value = v8Value->ToString();
        Handle<String> v8string = Handle<String>::Cast(value);
        String::Utf8Value v8UtfString(v8string);
        internalData_ = QByteArray(*v8UtfString);
    }
    return NATIVE_ERROR_OK;
}