bool JS4D::StringToVString( StringRef inJSString, VString& outString) { bool ok; if (inJSString != NULL) { size_t length = JSStringGetLength( inJSString); UniChar *p = outString.GetCPointerForWrite( length); if (p != NULL) { ::memcpy( p, JSStringGetCharactersPtr( inJSString), length * sizeof( UniChar)); ok = outString.Validate( length); } else { outString.Clear(); ok = false; } } else { ok = false; outString.Clear(); } return ok; }
void VUUID::GetString(VString& outValue) const { if (outValue.EnsureSize(32)) { UniChar* ptr = outValue.GetCPointerForWrite(); for (sLONG index = 0 ; index < 16 ; ++index) { uWORD nibble = (uWORD) (fData.fBytes[index] / 16); if (nibble < 10) ptr[index * 2] = (UniChar) (CHAR_DIGIT_ZERO + nibble); else ptr[index * 2] = (UniChar) (CHAR_LATIN_CAPITAL_LETTER_A + (nibble - 10)); nibble = (uWORD) ((fData.fBytes[index] % 16)); if (nibble < 10) ptr[index * 2 + 1] = (UniChar) (CHAR_DIGIT_ZERO + nibble); else ptr[index * 2 + 1] = (UniChar) (CHAR_LATIN_CAPITAL_LETTER_A + (nibble - 10)); } outValue.Validate(32); } }
XBOX::VFile *VXMLParser::ResolveEntityFromFolder( const VString& inEntityBase, VFolder *inEntityLocalFolder, const VString& inSystemID) { VFile *file = NULL; if (inEntityLocalFolder != NULL) { if (inSystemID.BeginsWith( inEntityBase)) { VString relativePath = inSystemID; relativePath.Exchange( inEntityBase, CVSTR( "")); // convert into native path to please VFile for( UniChar *p = relativePath.GetCPointerForWrite() ; *p ; ++p) { if (*p == '/') *p = FOLDER_SEPARATOR; } VFilePath path( inEntityLocalFolder->GetPath(), relativePath); if (path.IsFile()) file = new VFile( path); } } return file; }
VError XWinFolder::RetainSystemFolder( ESystemFolderKind inFolderKind, bool inCreateFolder, VFolder **outFolder ) { VString folderPath; UniChar path[4096]; size_t maxLength = sizeof( path)/sizeof( UniChar); path[maxLength-2]=0; VFolder* sysFolder = NULL; DWORD winErr = ERROR_PATH_NOT_FOUND; switch( inFolderKind) { case eFK_Executable: { DWORD pathLength = ::GetModuleFileNameW( NULL, path, (DWORD) maxLength); if (testAssert( pathLength != 0 && !path[maxLength-2])) { folderPath.FromUniCString( path ); VFile exeFile( folderPath ); sysFolder = exeFile.RetainParentFolder(); winErr = 0; } break; } case eFK_Temporary: { DWORD length = ::GetTempPathW( (DWORD) maxLength, path); if ( (length > 0) && (length <= maxLength) && !path[maxLength-2]) { DWORD size = ::GetLongPathNameW( path, NULL, 0); if (size > 0) { UniChar *p = folderPath.GetCPointerForWrite( size-1); if (p != NULL) { DWORD result = ::GetLongPathNameW( path, p, size); if (result == 0) winErr = GetLastError(); else winErr = 0; folderPath.Validate( result); sysFolder = new VFolder( folderPath ); } } } break; } default: { int type; switch( inFolderKind) { case eFK_UserDocuments: type = CSIDL_PERSONAL; break; case eFK_CommonPreferences: type = CSIDL_COMMON_APPDATA; break; case eFK_UserPreferences: type = CSIDL_APPDATA; break; case eFK_CommonApplicationData: type = CSIDL_COMMON_APPDATA; break; case eFK_UserApplicationData: type = CSIDL_APPDATA; break; case eFK_CommonCache: type = CSIDL_COMMON_APPDATA; break; case eFK_UserCache: type = CSIDL_LOCAL_APPDATA; break; default: xbox_assert( false); type = CSIDL_APPDATA; break; } HRESULT result = ::SHGetFolderPathW( NULL, type, NULL, SHGFP_TYPE_CURRENT, path); if ( result == S_OK || result == S_FALSE ) // S_FALSE means The CSIDL is valid, but the folder does not exist. { folderPath.FromUniCString( path); if (folderPath[folderPath.GetLength()-1] != FOLDER_SEPARATOR) folderPath += FOLDER_SEPARATOR; sysFolder = new VFolder( folderPath ); winErr = 0; } break; } } if ( (sysFolder != NULL) && !sysFolder->Exists() ) { if (inCreateFolder) { if (sysFolder->CreateRecursive() != VE_OK) ReleaseRefCountable( &sysFolder); } else { ReleaseRefCountable( &sysFolder); } } *outFolder = sysFolder; return MAKE_NATIVE_VERROR( winErr); }
VValueSingle *JS4D::ValueToVValue( ContextRef inContext, ValueRef inValue, ValueRef *outException) { if (inValue == NULL) return NULL; VValueSingle *value; JSType type = JSValueGetType( inContext, inValue); switch( type) { case kJSTypeUndefined: case kJSTypeNull: value = NULL; //new VEmpty; break; case kJSTypeBoolean: value = new VBoolean( JSValueToBoolean( inContext, inValue)); break; case kJSTypeNumber: value = new VReal( JSValueToNumber( inContext, inValue, outException)); break; case kJSTypeString: { JSStringRef jsString = JSValueToStringCopy( inContext, inValue, outException); if (jsString != NULL) { VString *s = new VString; size_t length = JSStringGetLength( jsString); UniChar *p = (s != NULL) ? s->GetCPointerForWrite( length) : NULL; if (p != NULL) { ::memcpy( p, JSStringGetCharactersPtr( jsString), length * sizeof( UniChar)); s->Validate( length); value = s; } else { delete s; value = NULL; } JSStringRelease( jsString); } else { value = NULL; } break; } case kJSTypeObject: { if (ValueIsInstanceOf( inContext, inValue, CVSTR( "Date"), outException)) { VTime *time = new VTime; if (time != NULL) { JSObjectRef dateObject = JSValueToObject( inContext, inValue, outException); DateObjectToVTime( inContext, dateObject, *time, outException); value = time; } else { value = NULL; } } else if (JSValueIsObjectOfClass( inContext, inValue, VJSFolderIterator::Class())) { value = NULL; JS4DFolderIterator* container = static_cast<JS4DFolderIterator*>(JSObjectGetPrivate( JSValueToObject( inContext, inValue, outException) )); if (testAssert( container != NULL)) { VFolder* folder = container->GetFolder(); if (folder != NULL) { VString *s = new VString; if (s != NULL) folder->GetPath( *s, FPS_POSIX); value = s; } } } else if (JSValueIsObjectOfClass( inContext, inValue, VJSFileIterator::Class())) { value = NULL; JS4DFileIterator* container = static_cast<JS4DFileIterator*>(JSObjectGetPrivate( JSValueToObject( inContext, inValue, outException) )); if (testAssert( container != NULL)) { VFile* file = container->GetFile(); if (file != NULL) { VString *s = new VString; if (s != NULL) file->GetPath( *s, FPS_POSIX); value = s; } } } else if (JSValueIsObjectOfClass( inContext, inValue, VJSBlob::Class())) { // remember File inherits from Blob so one must check File before Blob VJSBlob::PrivateDataType* blobValue = static_cast<VJSBlob::PrivateDataType*>(JSObjectGetPrivate( JSValueToObject( inContext, inValue, outException) )); if (testAssert( blobValue != NULL)) { VJSDataSlice *slice = blobValue->RetainDataSlice(); VBlobWithPtr *blob = new VBlobWithPtr; if ( (blob != NULL) && (slice != NULL) && (slice->GetDataSize() > 0) ) { if (blob->PutData( slice->GetDataPtr(), slice->GetDataSize()) != VE_OK) { delete blob; blob = NULL; } } value = blob; ReleaseRefCountable( &slice); } else { value = NULL; } } #if !VERSION_LINUX // Postponed Linux Implementation ! else if (JSValueIsObjectOfClass( inContext, inValue, VJSImage::Class())) { VJSImage::PrivateDataType* piccontainer = static_cast<VJSImage::PrivateDataType*>(JSObjectGetPrivate( JSValueToObject( inContext, inValue, outException) )); if (testAssert( piccontainer != NULL)) { VPicture *vpic = piccontainer->GetPict(); value = (vpic != NULL) ? new VPicture(*vpic) : NULL; } else { value = NULL; } } #endif else { value = NULL; } break; } default: value = NULL; break; } return value; }