SL-13669 Change inventory cache to use a standard LLSD format
parent
40b5babccd
commit
357edecd9b
|
|
@ -228,22 +228,6 @@ BOOL LLInventoryObject::importLegacyStream(std::istream& input_stream)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
// exportFile should be replaced with exportLegacyStream
|
||||
// not sure whether exportLegacyStream(llofstream(fp)) would work, fp may need to get icramented...
|
||||
BOOL LLInventoryObject::exportFile(LLFILE* fp, BOOL) const
|
||||
{
|
||||
std::string uuid_str;
|
||||
fprintf(fp, "\tinv_object\t0\n\t{\n");
|
||||
mUUID.toString(uuid_str);
|
||||
fprintf(fp, "\t\tobj_id\t%s\n", uuid_str.c_str());
|
||||
mParentUUID.toString(uuid_str);
|
||||
fprintf(fp, "\t\tparent_id\t%s\n", uuid_str.c_str());
|
||||
fprintf(fp, "\t\ttype\t%s\n", LLAssetType::lookup(mType));
|
||||
fprintf(fp, "\t\tname\t%s|\n", mName.c_str());
|
||||
fprintf(fp,"\t}\n");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL LLInventoryObject::exportLegacyStream(std::ostream& output_stream, BOOL) const
|
||||
{
|
||||
std::string uuid_str;
|
||||
|
|
@ -603,215 +587,6 @@ BOOL LLInventoryItem::unpackMessage(LLMessageSystem* msg, const char* block, S32
|
|||
#endif
|
||||
}
|
||||
|
||||
// virtual
|
||||
BOOL LLInventoryItem::importFile(LLFILE* fp)
|
||||
{
|
||||
// *NOTE: Changing the buffer size will require changing the scanf
|
||||
// calls below.
|
||||
char buffer[MAX_STRING]; /* Flawfinder: ignore */
|
||||
char keyword[MAX_STRING]; /* Flawfinder: ignore */
|
||||
char valuestr[MAX_STRING]; /* Flawfinder: ignore */
|
||||
char junk[MAX_STRING]; /* Flawfinder: ignore */
|
||||
BOOL success = TRUE;
|
||||
|
||||
keyword[0] = '\0';
|
||||
valuestr[0] = '\0';
|
||||
|
||||
mInventoryType = LLInventoryType::IT_NONE;
|
||||
mAssetUUID.setNull();
|
||||
while(success && (!feof(fp)))
|
||||
{
|
||||
if (fgets(buffer, MAX_STRING, fp) == NULL)
|
||||
{
|
||||
buffer[0] = '\0';
|
||||
}
|
||||
|
||||
sscanf(buffer, " %254s %254s", keyword, valuestr); /* Flawfinder: ignore */
|
||||
if(0 == strcmp("{",keyword))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if(0 == strcmp("}", keyword))
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if(0 == strcmp("item_id", keyword))
|
||||
{
|
||||
mUUID.set(valuestr);
|
||||
}
|
||||
else if(0 == strcmp("parent_id", keyword))
|
||||
{
|
||||
mParentUUID.set(valuestr);
|
||||
}
|
||||
else if(0 == strcmp("permissions", keyword))
|
||||
{
|
||||
success = mPermissions.importFile(fp);
|
||||
}
|
||||
else if(0 == strcmp("sale_info", keyword))
|
||||
{
|
||||
// Sale info used to contain next owner perm. It is now in
|
||||
// the permissions. Thus, we read that out, and fix legacy
|
||||
// objects. It's possible this op would fail, but it
|
||||
// should pick up the vast majority of the tasks.
|
||||
BOOL has_perm_mask = FALSE;
|
||||
U32 perm_mask = 0;
|
||||
success = mSaleInfo.importFile(fp, has_perm_mask, perm_mask);
|
||||
if(has_perm_mask)
|
||||
{
|
||||
if(perm_mask == PERM_NONE)
|
||||
{
|
||||
perm_mask = mPermissions.getMaskOwner();
|
||||
}
|
||||
// fair use fix.
|
||||
if(!(perm_mask & PERM_COPY))
|
||||
{
|
||||
perm_mask |= PERM_TRANSFER;
|
||||
}
|
||||
mPermissions.setMaskNext(perm_mask);
|
||||
}
|
||||
}
|
||||
else if(0 == strcmp("shadow_id", keyword))
|
||||
{
|
||||
mAssetUUID.set(valuestr);
|
||||
LLXORCipher cipher(MAGIC_ID.mData, UUID_BYTES);
|
||||
cipher.decrypt(mAssetUUID.mData, UUID_BYTES);
|
||||
}
|
||||
else if(0 == strcmp("asset_id", keyword))
|
||||
{
|
||||
mAssetUUID.set(valuestr);
|
||||
}
|
||||
else if(0 == strcmp("type", keyword))
|
||||
{
|
||||
mType = LLAssetType::lookup(valuestr);
|
||||
}
|
||||
else if(0 == strcmp("inv_type", keyword))
|
||||
{
|
||||
mInventoryType = LLInventoryType::lookup(std::string(valuestr));
|
||||
}
|
||||
else if(0 == strcmp("flags", keyword))
|
||||
{
|
||||
sscanf(valuestr, "%x", &mFlags);
|
||||
}
|
||||
else if(0 == strcmp("name", keyword))
|
||||
{
|
||||
//strcpy(valuestr, buffer + strlen(keyword) + 3);
|
||||
// *NOTE: Not ANSI C, but widely supported.
|
||||
sscanf( /* Flawfinder: ignore */
|
||||
buffer,
|
||||
" %254s%254[\t]%254[^|]",
|
||||
keyword, junk, valuestr);
|
||||
|
||||
// IW: sscanf chokes and puts | in valuestr if there's no name
|
||||
if (valuestr[0] == '|')
|
||||
{
|
||||
valuestr[0] = '\000';
|
||||
}
|
||||
|
||||
mName.assign(valuestr);
|
||||
LLStringUtil::replaceNonstandardASCII(mName, ' ');
|
||||
LLStringUtil::replaceChar(mName, '|', ' ');
|
||||
}
|
||||
else if(0 == strcmp("desc", keyword))
|
||||
{
|
||||
//strcpy(valuestr, buffer + strlen(keyword) + 3);
|
||||
// *NOTE: Not ANSI C, but widely supported.
|
||||
sscanf( /* Flawfinder: ignore */
|
||||
buffer,
|
||||
" %254s%254[\t]%254[^|]",
|
||||
keyword, junk, valuestr);
|
||||
|
||||
if (valuestr[0] == '|')
|
||||
{
|
||||
valuestr[0] = '\000';
|
||||
}
|
||||
|
||||
disclaimMem(mDescription);
|
||||
mDescription.assign(valuestr);
|
||||
claimMem(mDescription);
|
||||
LLStringUtil::replaceNonstandardASCII(mDescription, ' ');
|
||||
/* TODO -- ask Ian about this code
|
||||
const char *donkey = mDescription.c_str();
|
||||
if (donkey[0] == '|')
|
||||
{
|
||||
LL_ERRS() << "Donkey" << LL_ENDL;
|
||||
}
|
||||
*/
|
||||
}
|
||||
else if(0 == strcmp("creation_date", keyword))
|
||||
{
|
||||
S32 date;
|
||||
sscanf(valuestr, "%d", &date);
|
||||
mCreationDate = date;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "unknown keyword '" << keyword
|
||||
<< "' in inventory import of item " << mUUID << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
// Need to convert 1.0 simstate files to a useful inventory type
|
||||
// and potentially deal with bad inventory tyes eg, a landmark
|
||||
// marked as a texture.
|
||||
if((LLInventoryType::IT_NONE == mInventoryType)
|
||||
|| !inventory_and_asset_types_match(mInventoryType, mType))
|
||||
{
|
||||
LL_DEBUGS() << "Resetting inventory type for " << mUUID << LL_ENDL;
|
||||
mInventoryType = LLInventoryType::defaultForAssetType(mType);
|
||||
}
|
||||
|
||||
mPermissions.initMasks(mInventoryType);
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
BOOL LLInventoryItem::exportFile(LLFILE* fp, BOOL include_asset_key) const
|
||||
{
|
||||
std::string uuid_str;
|
||||
fprintf(fp, "\tinv_item\t0\n\t{\n");
|
||||
mUUID.toString(uuid_str);
|
||||
fprintf(fp, "\t\titem_id\t%s\n", uuid_str.c_str());
|
||||
mParentUUID.toString(uuid_str);
|
||||
fprintf(fp, "\t\tparent_id\t%s\n", uuid_str.c_str());
|
||||
mPermissions.exportFile(fp);
|
||||
|
||||
// Check for permissions to see the asset id, and if so write it
|
||||
// out as an asset id. Otherwise, apply our cheesy encryption.
|
||||
if(include_asset_key)
|
||||
{
|
||||
U32 mask = mPermissions.getMaskBase();
|
||||
if(((mask & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED)
|
||||
|| (mAssetUUID.isNull()))
|
||||
{
|
||||
mAssetUUID.toString(uuid_str);
|
||||
fprintf(fp, "\t\tasset_id\t%s\n", uuid_str.c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
LLUUID shadow_id(mAssetUUID);
|
||||
LLXORCipher cipher(MAGIC_ID.mData, UUID_BYTES);
|
||||
cipher.encrypt(shadow_id.mData, UUID_BYTES);
|
||||
shadow_id.toString(uuid_str);
|
||||
fprintf(fp, "\t\tshadow_id\t%s\n", uuid_str.c_str());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LLUUID::null.toString(uuid_str);
|
||||
fprintf(fp, "\t\tasset_id\t%s\n", uuid_str.c_str());
|
||||
}
|
||||
fprintf(fp, "\t\ttype\t%s\n", LLAssetType::lookup(mType));
|
||||
const std::string inv_type_str = LLInventoryType::lookup(mInventoryType);
|
||||
if(!inv_type_str.empty()) fprintf(fp, "\t\tinv_type\t%s\n", inv_type_str.c_str());
|
||||
fprintf(fp, "\t\tflags\t%08x\n", mFlags);
|
||||
mSaleInfo.exportFile(fp);
|
||||
fprintf(fp, "\t\tname\t%s|\n", mName.c_str());
|
||||
fprintf(fp, "\t\tdesc\t%s|\n", mDescription.c_str());
|
||||
fprintf(fp, "\t\tcreation_date\t%d\n", (S32) mCreationDate);
|
||||
fprintf(fp,"\t}\n");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// virtual
|
||||
BOOL LLInventoryItem::importLegacyStream(std::istream& input_stream)
|
||||
{
|
||||
|
|
@ -1463,90 +1238,7 @@ void LLInventoryCategory::unpackMessage(LLMessageSystem* msg,
|
|||
msg->getStringFast(block, _PREHASH_Name, mName, block_num);
|
||||
LLStringUtil::replaceNonstandardASCII(mName, ' ');
|
||||
}
|
||||
|
||||
// virtual
|
||||
BOOL LLInventoryCategory::importFile(LLFILE* fp)
|
||||
{
|
||||
// *NOTE: Changing the buffer size will require changing the scanf
|
||||
// calls below.
|
||||
char buffer[MAX_STRING]; /* Flawfinder: ignore */
|
||||
char keyword[MAX_STRING]; /* Flawfinder: ignore */
|
||||
char valuestr[MAX_STRING]; /* Flawfinder: ignore */
|
||||
|
||||
keyword[0] = '\0';
|
||||
valuestr[0] = '\0';
|
||||
while(!feof(fp))
|
||||
{
|
||||
if (fgets(buffer, MAX_STRING, fp) == NULL)
|
||||
{
|
||||
buffer[0] = '\0';
|
||||
}
|
||||
|
||||
sscanf( /* Flawfinder: ignore */
|
||||
buffer,
|
||||
" %254s %254s",
|
||||
keyword, valuestr);
|
||||
if(0 == strcmp("{",keyword))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if(0 == strcmp("}", keyword))
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if(0 == strcmp("cat_id", keyword))
|
||||
{
|
||||
mUUID.set(valuestr);
|
||||
}
|
||||
else if(0 == strcmp("parent_id", keyword))
|
||||
{
|
||||
mParentUUID.set(valuestr);
|
||||
}
|
||||
else if(0 == strcmp("type", keyword))
|
||||
{
|
||||
mType = LLAssetType::lookup(valuestr);
|
||||
}
|
||||
else if(0 == strcmp("pref_type", keyword))
|
||||
{
|
||||
mPreferredType = LLFolderType::lookup(valuestr);
|
||||
}
|
||||
else if(0 == strcmp("name", keyword))
|
||||
{
|
||||
//strcpy(valuestr, buffer + strlen(keyword) + 3);
|
||||
// *NOTE: Not ANSI C, but widely supported.
|
||||
sscanf( /* Flawfinder: ignore */
|
||||
buffer,
|
||||
" %254s %254[^|]",
|
||||
keyword, valuestr);
|
||||
mName.assign(valuestr);
|
||||
LLStringUtil::replaceNonstandardASCII(mName, ' ');
|
||||
LLStringUtil::replaceChar(mName, '|', ' ');
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "unknown keyword '" << keyword
|
||||
<< "' in inventory import category " << mUUID << LL_ENDL;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL LLInventoryCategory::exportFile(LLFILE* fp, BOOL) const
|
||||
{
|
||||
std::string uuid_str;
|
||||
fprintf(fp, "\tinv_category\t0\n\t{\n");
|
||||
mUUID.toString(uuid_str);
|
||||
fprintf(fp, "\t\tcat_id\t%s\n", uuid_str.c_str());
|
||||
mParentUUID.toString(uuid_str);
|
||||
fprintf(fp, "\t\tparent_id\t%s\n", uuid_str.c_str());
|
||||
fprintf(fp, "\t\ttype\t%s\n", LLAssetType::lookup(mType));
|
||||
fprintf(fp, "\t\tpref_type\t%s\n", LLFolderType::lookup(mPreferredType).c_str());
|
||||
fprintf(fp, "\t\tname\t%s|\n", mName.c_str());
|
||||
fprintf(fp,"\t}\n");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
// virtual
|
||||
BOOL LLInventoryCategory::importLegacyStream(std::istream& input_stream)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -95,8 +95,7 @@ public:
|
|||
// Implemented here so that a minimal information set can be transmitted
|
||||
// between simulator and viewer.
|
||||
//--------------------------------------------------------------------
|
||||
// virtual BOOL importFile(LLFILE* fp);
|
||||
virtual BOOL exportFile(LLFILE* fp, BOOL include_asset_key = TRUE) const;
|
||||
|
||||
virtual BOOL importLegacyStream(std::istream& input_stream);
|
||||
virtual BOOL exportLegacyStream(std::ostream& output_stream, BOOL include_asset_key = TRUE) const;
|
||||
|
||||
|
|
@ -197,8 +196,6 @@ public:
|
|||
// File Support
|
||||
//--------------------------------------------------------------------
|
||||
public:
|
||||
virtual BOOL importFile(LLFILE* fp);
|
||||
virtual BOOL exportFile(LLFILE* fp, BOOL include_asset_key = TRUE) const;
|
||||
virtual BOOL importLegacyStream(std::istream& input_stream);
|
||||
virtual BOOL exportLegacyStream(std::ostream& output_stream, BOOL include_asset_key = TRUE) const;
|
||||
|
||||
|
|
@ -269,8 +266,6 @@ public:
|
|||
// File Support
|
||||
//--------------------------------------------------------------------
|
||||
public:
|
||||
virtual BOOL importFile(LLFILE* fp);
|
||||
virtual BOOL exportFile(LLFILE* fp, BOOL include_asset_key = TRUE) const;
|
||||
virtual BOOL importLegacyStream(std::istream& input_stream);
|
||||
virtual BOOL exportLegacyStream(std::ostream& output_stream, BOOL include_asset_key = TRUE) const;
|
||||
|
||||
|
|
|
|||
|
|
@ -565,148 +565,6 @@ void LLPermissions::unpackMessage(LLMessageSystem* msg, const char* block, S32 b
|
|||
}
|
||||
|
||||
|
||||
//
|
||||
// File support
|
||||
//
|
||||
|
||||
BOOL LLPermissions::importFile(LLFILE* fp)
|
||||
{
|
||||
init(LLUUID::null, LLUUID::null, LLUUID::null, LLUUID::null);
|
||||
const S32 BUFSIZE = 16384;
|
||||
|
||||
// *NOTE: Changing the buffer size will require changing the scanf
|
||||
// calls below.
|
||||
char buffer[BUFSIZE]; /* Flawfinder: ignore */
|
||||
char keyword[256]; /* Flawfinder: ignore */
|
||||
char valuestr[256]; /* Flawfinder: ignore */
|
||||
char uuid_str[256]; /* Flawfinder: ignore */
|
||||
U32 mask;
|
||||
|
||||
keyword[0] = '\0';
|
||||
valuestr[0] = '\0';
|
||||
|
||||
while (!feof(fp))
|
||||
{
|
||||
if (fgets(buffer, BUFSIZE, fp) == NULL)
|
||||
{
|
||||
buffer[0] = '\0';
|
||||
}
|
||||
|
||||
sscanf( /* Flawfinder: ignore */
|
||||
buffer,
|
||||
" %255s %255s",
|
||||
keyword, valuestr);
|
||||
if (!strcmp("{", keyword))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (!strcmp("}",keyword))
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if (!strcmp("creator_mask", keyword))
|
||||
{
|
||||
// legacy support for "creator" masks
|
||||
sscanf(valuestr, "%x", &mask);
|
||||
mMaskBase = mask;
|
||||
fixFairUse();
|
||||
}
|
||||
else if (!strcmp("base_mask", keyword))
|
||||
{
|
||||
sscanf(valuestr, "%x", &mask);
|
||||
mMaskBase = mask;
|
||||
//fixFairUse();
|
||||
}
|
||||
else if (!strcmp("owner_mask", keyword))
|
||||
{
|
||||
sscanf(valuestr, "%x", &mask);
|
||||
mMaskOwner = mask;
|
||||
}
|
||||
else if (!strcmp("group_mask", keyword))
|
||||
{
|
||||
sscanf(valuestr, "%x", &mask);
|
||||
mMaskGroup = mask;
|
||||
}
|
||||
else if (!strcmp("everyone_mask", keyword))
|
||||
{
|
||||
sscanf(valuestr, "%x", &mask);
|
||||
mMaskEveryone = mask;
|
||||
}
|
||||
else if (!strcmp("next_owner_mask", keyword))
|
||||
{
|
||||
sscanf(valuestr, "%x", &mask);
|
||||
mMaskNextOwner = mask;
|
||||
}
|
||||
else if (!strcmp("creator_id", keyword))
|
||||
{
|
||||
sscanf(valuestr, "%255s", uuid_str); /* Flawfinder: ignore */
|
||||
mCreator.set(uuid_str);
|
||||
}
|
||||
else if (!strcmp("owner_id", keyword))
|
||||
{
|
||||
sscanf(valuestr, "%255s", uuid_str); /* Flawfinder: ignore */
|
||||
mOwner.set(uuid_str);
|
||||
}
|
||||
else if (!strcmp("last_owner_id", keyword))
|
||||
{
|
||||
sscanf(valuestr, "%255s", uuid_str); /* Flawfinder: ignore */
|
||||
mLastOwner.set(uuid_str);
|
||||
}
|
||||
else if (!strcmp("group_id", keyword))
|
||||
{
|
||||
sscanf(valuestr, "%255s", uuid_str); /* Flawfinder: ignore */
|
||||
mGroup.set(uuid_str);
|
||||
}
|
||||
else if (!strcmp("group_owned", keyword))
|
||||
{
|
||||
sscanf(valuestr, "%d", &mask);
|
||||
if(mask) mIsGroupOwned = true;
|
||||
else mIsGroupOwned = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS() << "unknown keyword " << keyword << " in permissions import" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
fix();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
BOOL LLPermissions::exportFile(LLFILE* fp) const
|
||||
{
|
||||
std::string uuid_str;
|
||||
|
||||
fprintf(fp, "\tpermissions 0\n");
|
||||
fprintf(fp, "\t{\n");
|
||||
|
||||
fprintf(fp, "\t\tbase_mask\t%08x\n", mMaskBase);
|
||||
fprintf(fp, "\t\towner_mask\t%08x\n", mMaskOwner);
|
||||
fprintf(fp, "\t\tgroup_mask\t%08x\n", mMaskGroup);
|
||||
fprintf(fp, "\t\teveryone_mask\t%08x\n", mMaskEveryone);
|
||||
fprintf(fp, "\t\tnext_owner_mask\t%08x\n", mMaskNextOwner);
|
||||
|
||||
mCreator.toString(uuid_str);
|
||||
fprintf(fp, "\t\tcreator_id\t%s\n", uuid_str.c_str());
|
||||
|
||||
mOwner.toString(uuid_str);
|
||||
fprintf(fp, "\t\towner_id\t%s\n", uuid_str.c_str());
|
||||
|
||||
mLastOwner.toString(uuid_str);
|
||||
fprintf(fp, "\t\tlast_owner_id\t%s\n", uuid_str.c_str());
|
||||
|
||||
mGroup.toString(uuid_str);
|
||||
fprintf(fp, "\t\tgroup_id\t%s\n", uuid_str.c_str());
|
||||
|
||||
if(mIsGroupOwned)
|
||||
{
|
||||
fprintf(fp, "\t\tgroup_owned\t1\n");
|
||||
}
|
||||
fprintf(fp,"\t}\n");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
BOOL LLPermissions::importLegacyStream(std::istream& input_stream)
|
||||
{
|
||||
init(LLUUID::null, LLUUID::null, LLUUID::null, LLUUID::null);
|
||||
|
|
|
|||
|
|
@ -311,10 +311,6 @@ public:
|
|||
void packMessage(LLMessageSystem* msg) const;
|
||||
void unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0);
|
||||
|
||||
// Load/save support
|
||||
BOOL importFile(LLFILE* fp);
|
||||
BOOL exportFile(LLFILE* fp) const;
|
||||
|
||||
BOOL importLegacyStream(std::istream& input_stream);
|
||||
BOOL exportLegacyStream(std::ostream& output_stream) const;
|
||||
|
||||
|
|
|
|||
|
|
@ -78,16 +78,6 @@ U32 LLSaleInfo::getCRC32() const
|
|||
return rv;
|
||||
}
|
||||
|
||||
|
||||
BOOL LLSaleInfo::exportFile(LLFILE* fp) const
|
||||
{
|
||||
fprintf(fp, "\tsale_info\t0\n\t{\n");
|
||||
fprintf(fp, "\t\tsale_type\t%s\n", lookup(mSaleType));
|
||||
fprintf(fp, "\t\tsale_price\t%d\n", mSalePrice);
|
||||
fprintf(fp,"\t}\n");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL LLSaleInfo::exportLegacyStream(std::ostream& output_stream) const
|
||||
{
|
||||
output_stream << "\tsale_info\t0\n\t{\n";
|
||||
|
|
@ -129,69 +119,6 @@ bool LLSaleInfo::fromLLSD(const LLSD& sd, BOOL& has_perm_mask, U32& perm_mask)
|
|||
return true;
|
||||
}
|
||||
|
||||
// Deleted LLSaleInfo::exportFileXML() and LLSaleInfo::importXML()
|
||||
// because I can't find any non-test code references to it. 2009-05-04 JC
|
||||
|
||||
BOOL LLSaleInfo::importFile(LLFILE* fp, BOOL& has_perm_mask, U32& perm_mask)
|
||||
{
|
||||
has_perm_mask = FALSE;
|
||||
|
||||
// *NOTE: Changing the buffer size will require changing the scanf
|
||||
// calls below.
|
||||
char buffer[MAX_STRING]; /* Flawfinder: ignore */
|
||||
char keyword[MAX_STRING]; /* Flawfinder: ignore */
|
||||
char valuestr[MAX_STRING]; /* Flawfinder: ignore */
|
||||
BOOL success = TRUE;
|
||||
|
||||
keyword[0] = '\0';
|
||||
valuestr[0] = '\0';
|
||||
while(success && (!feof(fp)))
|
||||
{
|
||||
if (fgets(buffer, MAX_STRING, fp) == NULL)
|
||||
{
|
||||
buffer[0] = '\0';
|
||||
}
|
||||
|
||||
sscanf( /* Flawfinder: ignore */
|
||||
buffer,
|
||||
" %254s %254s",
|
||||
keyword, valuestr);
|
||||
if(!keyword[0])
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if(0 == strcmp("{",keyword))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if(0 == strcmp("}", keyword))
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if(0 == strcmp("sale_type", keyword))
|
||||
{
|
||||
mSaleType = lookup(valuestr);
|
||||
}
|
||||
else if(0 == strcmp("sale_price", keyword))
|
||||
{
|
||||
sscanf(valuestr, "%d", &mSalePrice);
|
||||
mSalePrice = llclamp(mSalePrice, 0, S32_MAX);
|
||||
}
|
||||
else if (!strcmp("perm_mask", keyword))
|
||||
{
|
||||
//LL_INFOS() << "found deprecated keyword perm_mask" << LL_ENDL;
|
||||
has_perm_mask = TRUE;
|
||||
sscanf(valuestr, "%x", &perm_mask);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "unknown keyword '" << keyword
|
||||
<< "' in sale info import" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
BOOL LLSaleInfo::importLegacyStream(std::istream& input_stream, BOOL& has_perm_mask, U32& perm_mask)
|
||||
{
|
||||
has_perm_mask = FALSE;
|
||||
|
|
|
|||
|
|
@ -84,11 +84,6 @@ public:
|
|||
void setSalePrice(S32 price);
|
||||
//void setNextOwnerPermMask(U32 mask) { mNextOwnerPermMask = mask; }
|
||||
|
||||
|
||||
// file serialization
|
||||
BOOL exportFile(LLFILE* fp) const;
|
||||
BOOL importFile(LLFILE* fp, BOOL& has_perm_mask, U32& perm_mask);
|
||||
|
||||
BOOL exportLegacyStream(std::ostream& output_stream) const;
|
||||
LLSD asLLSD() const;
|
||||
operator LLSD() const { return asLLSD(); }
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@
|
|||
#include "llcallbacklist.h"
|
||||
#include "llvoavatarself.h"
|
||||
#include "llgesturemgr.h"
|
||||
#include "llsdserialize.h"
|
||||
#include "llsdutil.h"
|
||||
#include "bufferarray.h"
|
||||
#include "bufferstream.h"
|
||||
|
|
@ -76,8 +77,8 @@ BOOL LLInventoryModel::sFirstTimeInViewer2 = TRUE;
|
|||
///----------------------------------------------------------------------------
|
||||
|
||||
//BOOL decompress_file(const char* src_filename, const char* dst_filename);
|
||||
static const char PRODUCTION_CACHE_FORMAT_STRING[] = "%s.inv";
|
||||
static const char GRID_CACHE_FORMAT_STRING[] = "%s.%s.inv";
|
||||
static const char PRODUCTION_CACHE_FORMAT_STRING[] = "%s.inv.llsd";
|
||||
static const char GRID_CACHE_FORMAT_STRING[] = "%s.%s.inv.llsd";
|
||||
static const char * const LOG_INV("Inventory");
|
||||
|
||||
struct InventoryIDPtrLess
|
||||
|
|
@ -2690,29 +2691,37 @@ bool LLInventoryModel::loadFromFile(const std::string& filename,
|
|||
{
|
||||
if(filename.empty())
|
||||
{
|
||||
LL_ERRS(LOG_INV) << "Filename is Null!" << LL_ENDL;
|
||||
LL_ERRS(LOG_INV) << "filename is Null!" << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
LL_INFOS(LOG_INV) << "LLInventoryModel::loadFromFile(" << filename << ")" << LL_ENDL;
|
||||
LLFILE* file = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/
|
||||
if(!file)
|
||||
LL_INFOS(LOG_INV) << "loading inventory from: (" << filename << ")" << LL_ENDL;
|
||||
|
||||
llifstream file(filename.c_str());
|
||||
|
||||
if (!file.is_open())
|
||||
{
|
||||
LL_INFOS(LOG_INV) << "unable to load inventory from: " << filename << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
// *NOTE: This buffer size is hard coded into scanf() below.
|
||||
char buffer[MAX_STRING]; /*Flawfinder: ignore*/
|
||||
char keyword[MAX_STRING]; /*Flawfinder: ignore*/
|
||||
char value[MAX_STRING]; /*Flawfinder: ignore*/
|
||||
is_cache_obsolete = true; // Obsolete until proven current
|
||||
while(!feof(file) && fgets(buffer, MAX_STRING, file))
|
||||
|
||||
is_cache_obsolete = true; // Obsolete until proven current
|
||||
|
||||
std::string line;
|
||||
LLPointer<LLSDParser> parser = new LLSDNotationParser();
|
||||
while (std::getline(file, line))
|
||||
{
|
||||
sscanf(buffer, " %126s %126s", keyword, value); /* Flawfinder: ignore */
|
||||
if(0 == strcmp("inv_cache_version", keyword))
|
||||
LLSD s_item;
|
||||
std::istringstream iss(line);
|
||||
if (parser->parse(iss, s_item, line.length()) == LLSDParser::PARSE_FAILURE)
|
||||
{
|
||||
S32 version;
|
||||
int succ = sscanf(value,"%d",&version);
|
||||
if ((1 == succ) && (version == sCurrentInvCacheVersion))
|
||||
LL_INFOS(LOG_INV)<< "Parsing inventory cache failed" << LL_ENDL;
|
||||
break;
|
||||
}
|
||||
|
||||
if (s_item.has("inv_cache_version"))
|
||||
{
|
||||
S32 version = s_item["inv_cache_version"].asInteger();
|
||||
if (version == sCurrentInvCacheVersion)
|
||||
{
|
||||
// Cache is up to date
|
||||
is_cache_obsolete = false;
|
||||
|
|
@ -2720,43 +2729,33 @@ bool LLInventoryModel::loadFromFile(const std::string& filename,
|
|||
}
|
||||
else
|
||||
{
|
||||
// Cache is out of date
|
||||
LL_INFOS(LOG_INV)<< "Inventory cache is out of date" << LL_ENDL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if(0 == strcmp("inv_category", keyword))
|
||||
else if (s_item.has("cat_id"))
|
||||
{
|
||||
if (is_cache_obsolete)
|
||||
break;
|
||||
|
||||
|
||||
LLPointer<LLViewerInventoryCategory> inv_cat = new LLViewerInventoryCategory(LLUUID::null);
|
||||
if(inv_cat->importFileLocal(file))
|
||||
if(inv_cat->importLLSD(s_item))
|
||||
{
|
||||
categories.push_back(inv_cat);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS(LOG_INV) << "loadInventoryFromFile(). Ignoring invalid inventory category: " << inv_cat->getName() << LL_ENDL;
|
||||
//delete inv_cat; // automatic when inv_cat is reassigned or destroyed
|
||||
}
|
||||
}
|
||||
else if(0 == strcmp("inv_item", keyword))
|
||||
else if (s_item.has("item_id"))
|
||||
{
|
||||
if (is_cache_obsolete)
|
||||
break;
|
||||
|
||||
LLPointer<LLViewerInventoryItem> inv_item = new LLViewerInventoryItem;
|
||||
if( inv_item->importFileLocal(file) )
|
||||
if( inv_item->fromLLSD(s_item) )
|
||||
{
|
||||
// *FIX: Need a better solution, this prevents the
|
||||
// application from freezing, but breaks inventory
|
||||
// caching.
|
||||
if(inv_item->getUUID().isNull())
|
||||
{
|
||||
//delete inv_item; // automatic when inv_cat is reassigned or destroyed
|
||||
LL_WARNS(LOG_INV) << "Ignoring inventory with null item id: "
|
||||
<< inv_item->getName() << LL_ENDL;
|
||||
|
||||
<< inv_item->getName() << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -2769,44 +2768,40 @@ bool LLInventoryModel::loadFromFile(const std::string& filename,
|
|||
items.push_back(inv_item);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS(LOG_INV) << "loadInventoryFromFile(). Ignoring invalid inventory item: " << inv_item->getName() << LL_ENDL;
|
||||
//delete inv_item; // automatic when inv_cat is reassigned or destroyed
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS(LOG_INV) << "Unknown token in inventory file '" << keyword << "'"
|
||||
<< LL_ENDL;
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose(file);
|
||||
if (is_cache_obsolete)
|
||||
return false;
|
||||
return true;
|
||||
|
||||
file.close();
|
||||
|
||||
return !is_cache_obsolete;
|
||||
}
|
||||
|
||||
// static
|
||||
bool LLInventoryModel::saveToFile(const std::string& filename,
|
||||
const cat_array_t& categories,
|
||||
const item_array_t& items)
|
||||
const cat_array_t& categories,
|
||||
const item_array_t& items)
|
||||
{
|
||||
if(filename.empty())
|
||||
if (filename.empty())
|
||||
{
|
||||
LL_ERRS(LOG_INV) << "Filename is Null!" << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
LL_INFOS(LOG_INV) << "LLInventoryModel::saveToFile(" << filename << ")" << LL_ENDL;
|
||||
LLFILE* file = LLFile::fopen(filename, "wb"); /*Flawfinder: ignore*/
|
||||
if(!file)
|
||||
|
||||
LL_INFOS(LOG_INV) << "saving inventory to: (" << filename << ")" << LL_ENDL;
|
||||
|
||||
llofstream fileXML(filename.c_str());
|
||||
if (!fileXML.is_open())
|
||||
{
|
||||
LL_WARNS(LOG_INV) << "unable to save inventory to: " << filename << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
||||
fprintf(file, "\tinv_cache_version\t%d\n",sCurrentInvCacheVersion);
|
||||
LLSD cache_ver;
|
||||
cache_ver["inv_cache_version"] = sCurrentInvCacheVersion;
|
||||
|
||||
fileXML << LLSDOStreamer<LLSDNotationFormatter>(cache_ver) << std::endl;
|
||||
|
||||
S32 count = categories.size();
|
||||
S32 i;
|
||||
for(i = 0; i < count; ++i)
|
||||
|
|
@ -2814,17 +2809,18 @@ bool LLInventoryModel::saveToFile(const std::string& filename,
|
|||
LLViewerInventoryCategory* cat = categories[i];
|
||||
if(cat->getVersion() != LLViewerInventoryCategory::VERSION_UNKNOWN)
|
||||
{
|
||||
cat->exportFileLocal(file);
|
||||
fileXML << LLSDOStreamer<LLSDNotationFormatter>(cat->exportLLSD()) << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
count = items.size();
|
||||
for(i = 0; i < count; ++i)
|
||||
{
|
||||
items[i]->exportFile(file);
|
||||
fileXML << LLSDOStreamer<LLSDNotationFormatter>(items[i]->asLLSD()) << std::endl;
|
||||
}
|
||||
|
||||
fclose(file);
|
||||
fileXML.close();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -81,6 +81,14 @@ static const char * const LOG_INV("Inventory");
|
|||
static const char * const LOG_LOCAL("InventoryLocalize");
|
||||
static const char * const LOG_NOTECARD("copy_inventory_from_notecard");
|
||||
|
||||
static const std::string INV_CAT_ID("cat_id");
|
||||
static const std::string INV_PARENT_ID("parent_id");
|
||||
static const std::string INV_ASSET_TYPE("type");
|
||||
static const std::string INV_PREFERRED_TYPE("pref_type");
|
||||
static const std::string INV_NAME("name");
|
||||
static const std::string INV_OWNER_ID("owner_id");
|
||||
static const std::string INV_VERSION("version");
|
||||
|
||||
#if 1
|
||||
// *TODO$: LLInventoryCallback should be deprecated to conform to the new boost::bind/coroutine model.
|
||||
// temp code in transition
|
||||
|
|
@ -518,14 +526,6 @@ void LLViewerInventoryItem::packMessage(LLMessageSystem* msg) const
|
|||
msg->addU32Fast(_PREHASH_CRC, crc);
|
||||
}
|
||||
|
||||
// virtual
|
||||
BOOL LLViewerInventoryItem::importFile(LLFILE* fp)
|
||||
{
|
||||
BOOL rv = LLInventoryItem::importFile(fp);
|
||||
mIsComplete = TRUE;
|
||||
return rv;
|
||||
}
|
||||
|
||||
// virtual
|
||||
BOOL LLViewerInventoryItem::importLegacyStream(std::istream& input_stream)
|
||||
{
|
||||
|
|
@ -534,32 +534,6 @@ BOOL LLViewerInventoryItem::importLegacyStream(std::istream& input_stream)
|
|||
return rv;
|
||||
}
|
||||
|
||||
bool LLViewerInventoryItem::importFileLocal(LLFILE* fp)
|
||||
{
|
||||
// TODO: convert all functions that return BOOL to return bool
|
||||
bool rv = (LLInventoryItem::importFile(fp) ? true : false);
|
||||
mIsComplete = false;
|
||||
return rv;
|
||||
}
|
||||
|
||||
bool LLViewerInventoryItem::exportFileLocal(LLFILE* fp) const
|
||||
{
|
||||
std::string uuid_str;
|
||||
fprintf(fp, "\tinv_item\t0\n\t{\n");
|
||||
mUUID.toString(uuid_str);
|
||||
fprintf(fp, "\t\titem_id\t%s\n", uuid_str.c_str());
|
||||
mParentUUID.toString(uuid_str);
|
||||
fprintf(fp, "\t\tparent_id\t%s\n", uuid_str.c_str());
|
||||
mPermissions.exportFile(fp);
|
||||
fprintf(fp, "\t\ttype\t%s\n", LLAssetType::lookup(mType));
|
||||
const std::string inv_type_str = LLInventoryType::lookup(mInventoryType);
|
||||
if(!inv_type_str.empty()) fprintf(fp, "\t\tinv_type\t%s\n", inv_type_str.c_str());
|
||||
fprintf(fp, "\t\tname\t%s|\n", mName.c_str());
|
||||
fprintf(fp, "\t\tcreation_date\t%d\n", (S32) mCreationDate);
|
||||
fprintf(fp,"\t}\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
void LLViewerInventoryItem::updateParentOnServer(BOOL restamp) const
|
||||
{
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
|
|
@ -720,90 +694,52 @@ S32 LLViewerInventoryCategory::getViewerDescendentCount() const
|
|||
return descendents_actual;
|
||||
}
|
||||
|
||||
bool LLViewerInventoryCategory::importFileLocal(LLFILE* fp)
|
||||
LLSD LLViewerInventoryCategory::exportLLSD() const
|
||||
{
|
||||
// *NOTE: This buffer size is hard coded into scanf() below.
|
||||
char buffer[MAX_STRING]; /* Flawfinder: ignore */
|
||||
char keyword[MAX_STRING]; /* Flawfinder: ignore */
|
||||
char valuestr[MAX_STRING]; /* Flawfinder: ignore */
|
||||
LLSD cat_data;
|
||||
cat_data[INV_CAT_ID] = mUUID;
|
||||
cat_data[INV_PARENT_ID] = mParentUUID;
|
||||
cat_data[INV_ASSET_TYPE] = LLAssetType::lookup(mType);
|
||||
cat_data[INV_PREFERRED_TYPE] = LLFolderType::lookup(mPreferredType);
|
||||
cat_data[INV_NAME] = mName;
|
||||
cat_data[INV_OWNER_ID] = mOwnerID;
|
||||
cat_data[INV_VERSION] = mVersion;
|
||||
|
||||
keyword[0] = '\0';
|
||||
valuestr[0] = '\0';
|
||||
while(!feof(fp))
|
||||
{
|
||||
if (fgets(buffer, MAX_STRING, fp) == NULL)
|
||||
{
|
||||
buffer[0] = '\0';
|
||||
}
|
||||
|
||||
sscanf( /* Flawfinder: ignore */
|
||||
buffer, " %254s %254s", keyword, valuestr);
|
||||
if(0 == strcmp("{",keyword))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if(0 == strcmp("}", keyword))
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if(0 == strcmp("cat_id", keyword))
|
||||
{
|
||||
mUUID.set(valuestr);
|
||||
}
|
||||
else if(0 == strcmp("parent_id", keyword))
|
||||
{
|
||||
mParentUUID.set(valuestr);
|
||||
}
|
||||
else if(0 == strcmp("type", keyword))
|
||||
{
|
||||
mType = LLAssetType::lookup(valuestr);
|
||||
}
|
||||
else if(0 == strcmp("pref_type", keyword))
|
||||
{
|
||||
mPreferredType = LLFolderType::lookup(valuestr);
|
||||
}
|
||||
else if(0 == strcmp("name", keyword))
|
||||
{
|
||||
//strcpy(valuestr, buffer + strlen(keyword) + 3);
|
||||
// *NOTE: Not ANSI C, but widely supported.
|
||||
sscanf( /* Flawfinder: ignore */
|
||||
buffer, " %254s %254[^|]", keyword, valuestr);
|
||||
mName.assign(valuestr);
|
||||
LLStringUtil::replaceNonstandardASCII(mName, ' ');
|
||||
LLStringUtil::replaceChar(mName, '|', ' ');
|
||||
}
|
||||
else if(0 == strcmp("owner_id", keyword))
|
||||
{
|
||||
mOwnerID.set(valuestr);
|
||||
}
|
||||
else if(0 == strcmp("version", keyword))
|
||||
{
|
||||
sscanf(valuestr, "%d", &mVersion);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS(LOG_INV) << "unknown keyword '" << keyword
|
||||
<< "' in inventory import category " << mUUID << LL_ENDL;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
return cat_data;
|
||||
}
|
||||
|
||||
bool LLViewerInventoryCategory::exportFileLocal(LLFILE* fp) const
|
||||
bool LLViewerInventoryCategory::importLLSD(const LLSD& cat_data)
|
||||
{
|
||||
std::string uuid_str;
|
||||
fprintf(fp, "\tinv_category\t0\n\t{\n");
|
||||
mUUID.toString(uuid_str);
|
||||
fprintf(fp, "\t\tcat_id\t%s\n", uuid_str.c_str());
|
||||
mParentUUID.toString(uuid_str);
|
||||
fprintf(fp, "\t\tparent_id\t%s\n", uuid_str.c_str());
|
||||
fprintf(fp, "\t\ttype\t%s\n", LLAssetType::lookup(mType));
|
||||
fprintf(fp, "\t\tpref_type\t%s\n", LLFolderType::lookup(mPreferredType).c_str());
|
||||
fprintf(fp, "\t\tname\t%s|\n", mName.c_str());
|
||||
mOwnerID.toString(uuid_str);
|
||||
fprintf(fp, "\t\towner_id\t%s\n", uuid_str.c_str());
|
||||
fprintf(fp, "\t\tversion\t%d\n", mVersion);
|
||||
fprintf(fp,"\t}\n");
|
||||
if (cat_data.has(INV_CAT_ID))
|
||||
{
|
||||
setUUID(cat_data[INV_CAT_ID].asUUID());
|
||||
}
|
||||
if (cat_data.has(INV_PARENT_ID))
|
||||
{
|
||||
setParent(cat_data[INV_PARENT_ID].asUUID());
|
||||
}
|
||||
if (cat_data.has(INV_ASSET_TYPE))
|
||||
{
|
||||
setType(LLAssetType::lookup(cat_data[INV_ASSET_TYPE].asString()));
|
||||
}
|
||||
if (cat_data.has(INV_PREFERRED_TYPE))
|
||||
{
|
||||
setPreferredType(LLFolderType::lookup(cat_data[INV_PREFERRED_TYPE].asString()));
|
||||
}
|
||||
if (cat_data.has(INV_NAME))
|
||||
{
|
||||
mName = cat_data[INV_NAME].asString();
|
||||
LLStringUtil::replaceNonstandardASCII(mName, ' ');
|
||||
LLStringUtil::replaceChar(mName, '|', ' ');
|
||||
}
|
||||
if (cat_data.has(INV_OWNER_ID))
|
||||
{
|
||||
mOwnerID = cat_data[INV_OWNER_ID].asUUID();
|
||||
}
|
||||
if (cat_data.has(INV_VERSION))
|
||||
{
|
||||
setVersion(cat_data[INV_VERSION].asInteger());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -131,14 +131,8 @@ public:
|
|||
virtual void packMessage(LLMessageSystem* msg) const;
|
||||
virtual BOOL unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0);
|
||||
virtual BOOL unpackMessage(const LLSD& item);
|
||||
virtual BOOL importFile(LLFILE* fp);
|
||||
virtual BOOL importLegacyStream(std::istream& input_stream);
|
||||
|
||||
// file handling on the viewer. These are not meant for anything
|
||||
// other than cacheing.
|
||||
bool exportFileLocal(LLFILE* fp) const;
|
||||
bool importFileLocal(LLFILE* fp);
|
||||
|
||||
// new methods
|
||||
BOOL isFinished() const { return mIsComplete; }
|
||||
void setComplete(BOOL complete) { mIsComplete = complete; }
|
||||
|
|
@ -226,10 +220,9 @@ public:
|
|||
// How many descendents do we currently have information for in the InventoryModel?
|
||||
S32 getViewerDescendentCount() const;
|
||||
|
||||
// file handling on the viewer. These are not meant for anything
|
||||
// other than caching.
|
||||
bool exportFileLocal(LLFILE* fp) const;
|
||||
bool importFileLocal(LLFILE* fp);
|
||||
LLSD exportLLSD() const;
|
||||
bool importLLSD(const LLSD& cat_data);
|
||||
|
||||
void determineFolderType();
|
||||
void changeType(LLFolderType::EType new_folder_type);
|
||||
virtual void unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0);
|
||||
|
|
|
|||
|
|
@ -405,43 +405,6 @@ namespace tut
|
|||
|
||||
template<> template<>
|
||||
void permission_object_t::test<20>()
|
||||
{
|
||||
LLFILE* fp = LLFile::fopen("linden_file.dat","w+");
|
||||
if(!fp)
|
||||
{
|
||||
LL_ERRS() << "file couldn't be opened\n" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
LLPermissions perm,perm1;
|
||||
LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
|
||||
LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806");
|
||||
LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d");
|
||||
LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
|
||||
perm.init(creator,owner,lastOwner,group);
|
||||
|
||||
U32 base = PERM_TRANSFER | PERM_COPY;
|
||||
U32 ownerp = PERM_TRANSFER;
|
||||
U32 groupp = PERM_TRANSFER;
|
||||
U32 everyone = PERM_TRANSFER;
|
||||
U32 next = PERM_NONE;
|
||||
|
||||
perm.initMasks(base, ownerp, everyone, groupp, next);
|
||||
|
||||
ensure("Permissions export failed", perm.exportFile(fp));
|
||||
fclose(fp);
|
||||
fp = LLFile::fopen("linden_file.dat","r+");
|
||||
if(!fp)
|
||||
{
|
||||
LL_ERRS() << "file couldn't be opened\n" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
ensure("Permissions import failed", perm1.importFile(fp));
|
||||
fclose(fp);
|
||||
ensure_equals("exportFile()/importFile():failed to export and import the data ", perm1, perm);
|
||||
}
|
||||
|
||||
template<> template<>
|
||||
void permission_object_t::test<21>()
|
||||
{
|
||||
LLPermissions perm,perm1;
|
||||
LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
|
||||
|
|
@ -467,14 +430,7 @@ namespace tut
|
|||
}
|
||||
|
||||
template<> template<>
|
||||
void permission_object_t::test<22>()
|
||||
{
|
||||
// Deleted LLPermissions::exportFileXML() and LLPermissions::importXML()
|
||||
// because I can't find any non-test code references to it. 2009-05-04 JC
|
||||
}
|
||||
|
||||
template<> template<>
|
||||
void permission_object_t::test<23>()
|
||||
void permission_object_t::test<21>()
|
||||
{
|
||||
LLPermissions perm,perm1;
|
||||
LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
|
||||
|
|
@ -490,7 +446,7 @@ namespace tut
|
|||
}
|
||||
|
||||
template<> template<>
|
||||
void permission_object_t::test<24>()
|
||||
void permission_object_t::test<22>()
|
||||
{
|
||||
LLPermissions perm,perm1;
|
||||
LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
|
||||
|
|
@ -513,7 +469,7 @@ namespace tut
|
|||
}
|
||||
|
||||
template<> template<>
|
||||
void permission_object_t::test<25>()
|
||||
void permission_object_t::test<23>()
|
||||
{
|
||||
LLAggregatePermissions AggrPermission;
|
||||
LLAggregatePermissions AggrPermission1;
|
||||
|
|
|
|||
|
|
@ -106,41 +106,6 @@ namespace tut
|
|||
|
||||
template<> template<>
|
||||
void llsaleinfo_test_t::test<2>()
|
||||
{
|
||||
|
||||
LLFILE* fp = LLFile::fopen("linden_file.dat","w+");
|
||||
if(!fp)
|
||||
{
|
||||
LL_ERRS() << "file could not be opened\n" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
S32 sale_price = 43500;
|
||||
LLSaleInfo llsaleinfo(LLSaleInfo::FS_COPY, sale_price);
|
||||
|
||||
llsaleinfo.exportFile(fp);
|
||||
fclose(fp);
|
||||
|
||||
LLSaleInfo llsaleinfo1;
|
||||
U32 perm_mask;
|
||||
BOOL has_perm_mask;
|
||||
fp = LLFile::fopen("linden_file.dat","r");
|
||||
|
||||
if(!fp)
|
||||
{
|
||||
LL_ERRS() << "file coudnt be opened\n" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
llsaleinfo1.importFile(fp, has_perm_mask, perm_mask);
|
||||
fclose(fp);
|
||||
|
||||
ensure("importFile() fn failed ", llsaleinfo.getSaleType() == llsaleinfo1.getSaleType() &&
|
||||
llsaleinfo.getSalePrice() == llsaleinfo1.getSalePrice());
|
||||
}
|
||||
|
||||
template<> template<>
|
||||
void llsaleinfo_test_t::test<3>()
|
||||
{
|
||||
S32 sale_price = 525452;
|
||||
LLSaleInfo llsaleinfo(LLSaleInfo::FS_ORIGINAL, sale_price);
|
||||
|
|
@ -160,14 +125,7 @@ namespace tut
|
|||
}
|
||||
|
||||
template<> template<>
|
||||
void llsaleinfo_test_t::test<4>()
|
||||
{
|
||||
// Deleted LLSaleInfo::exportFileXML() and LLSaleInfo::importXML()
|
||||
// because I can't find any non-test code references to it. 2009-05-04 JC
|
||||
}
|
||||
|
||||
template<> template<>
|
||||
void llsaleinfo_test_t::test<5>()
|
||||
void llsaleinfo_test_t::test<3>()
|
||||
{
|
||||
S32 sale_price = 99000;
|
||||
LLSaleInfo saleinfo(LLSaleInfo::FS_ORIGINAL, sale_price);
|
||||
|
|
@ -186,7 +144,7 @@ namespace tut
|
|||
|
||||
//static EForSale lookup(const char* name) fn test
|
||||
template<> template<>
|
||||
void llsaleinfo_test_t::test<6>()
|
||||
void llsaleinfo_test_t::test<4>()
|
||||
{
|
||||
S32 sale_price = 233223;
|
||||
LLSaleInfo::EForSale ret_type = LLSaleInfo::lookup("orig");
|
||||
|
|
@ -200,7 +158,7 @@ namespace tut
|
|||
|
||||
//void LLSaleInfo::accumulate(const LLSaleInfo& sale_info) fn test
|
||||
template<> template<>
|
||||
void llsaleinfo_test_t::test<7>()
|
||||
void llsaleinfo_test_t::test<5>()
|
||||
{
|
||||
S32 sale_price = 20;
|
||||
LLSaleInfo saleinfo(LLSaleInfo::FS_COPY, sale_price);
|
||||
|
|
@ -213,7 +171,7 @@ namespace tut
|
|||
// test cases of bool operator==(const LLSaleInfo &rhs) fn
|
||||
// test case of bool operator!=(const LLSaleInfo &rhs) fn
|
||||
template<> template<>
|
||||
void llsaleinfo_test_t::test<8>()
|
||||
void llsaleinfo_test_t::test<6>()
|
||||
{
|
||||
S32 sale_price = 55000;
|
||||
LLSaleInfo saleinfo(LLSaleInfo::FS_ORIGINAL, sale_price);
|
||||
|
|
@ -225,7 +183,7 @@ namespace tut
|
|||
}
|
||||
|
||||
template<> template<>
|
||||
void llsaleinfo_test_t::test<9>()
|
||||
void llsaleinfo_test_t::test<7>()
|
||||
{
|
||||
|
||||
//TBD: void LLSaleInfo::packMessage(LLMessageSystem* msg) const
|
||||
|
|
|
|||
Loading…
Reference in New Issue