summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorprep <prep@lindenlab.com>2013-03-11 18:02:16 -0400
committerprep <prep@lindenlab.com>2013-03-11 18:02:16 -0400
commit46ab23c94be164cb174a97bde11cc38067f9edd0 (patch)
treee671f5a9c9800a871500532eaba55ce26df5e6ad
parent9ea6a96be9a5fda489d5e5ce28fc2df7c6f4c309 (diff)
llinventory merge fixes
-rw-r--r--indra/llappearance/llwearable.cpp8
-rw-r--r--indra/llinventory/CMakeLists.txt10
-rw-r--r--indra/llinventory/llinventory.cpp26
-rw-r--r--indra/llinventory/llpermissions.cpp193
-rw-r--r--indra/llinventory/llpermissions.h4
-rw-r--r--indra/llinventory/llsaleinfo.cpp95
-rw-r--r--indra/llinventory/llsaleinfo.h4
-rw-r--r--indra/test/llpermissions_tut.cpp4
-rw-r--r--indra/test/llsaleinfo_tut.cpp4
9 files changed, 251 insertions, 97 deletions
diff --git a/indra/llappearance/llwearable.cpp b/indra/llappearance/llwearable.cpp
index 4028c1dfad..d86a460511 100644
--- a/indra/llappearance/llwearable.cpp
+++ b/indra/llappearance/llwearable.cpp
@@ -81,13 +81,13 @@ BOOL LLWearable::exportStream( std::ostream& output_stream ) const
output_stream << mDescription << "\n";
// permissions
- if( !mPermissions.exportStream( output_stream ) )
+ if( !mPermissions.exportLegacyStream( output_stream ) )
{
return FALSE;
}
// sale info
- if( !mSaleInfo.exportStream( output_stream ) )
+ if( !mSaleInfo.exportLegacyStream( output_stream ) )
{
return FALSE;
}
@@ -263,7 +263,7 @@ LLWearable::EImportResult LLWearable::importStream( std::istream& input_stream,
llwarns << "Bad Wearable asset: missing valid permissions" << llendl;
return LLWearable::FAILURE;
}
- if( !mPermissions.importStream( input_stream ) )
+ if( !mPermissions.importLegacyStream( input_stream ) )
{
return LLWearable::FAILURE;
}
@@ -288,7 +288,7 @@ LLWearable::EImportResult LLWearable::importStream( std::istream& input_stream,
// up the vast majority of the tasks.
BOOL has_perm_mask = FALSE;
U32 perm_mask = 0;
- if( !mSaleInfo.importStream(input_stream, has_perm_mask, perm_mask) )
+ if( !mSaleInfo.importLegacyStream(input_stream, has_perm_mask, perm_mask) )
{
return LLWearable::FAILURE;
}
diff --git a/indra/llinventory/CMakeLists.txt b/indra/llinventory/CMakeLists.txt
index c69e153dec..e45c809e7e 100644
--- a/indra/llinventory/CMakeLists.txt
+++ b/indra/llinventory/CMakeLists.txt
@@ -15,10 +15,6 @@ include_directories(
${LLMESSAGE_INCLUDE_DIRS}
${LLXML_INCLUDE_DIRS}
)
-include_directories(SYSTEM
- ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
- ${LLXML_SYSTEM_INCLUDE_DIRS}
- )
set(llinventory_SOURCE_FILES
llcategory.cpp
@@ -62,12 +58,6 @@ list(APPEND llinventory_SOURCE_FILES ${llinventory_HEADER_FILES})
add_library (llinventory ${llinventory_SOURCE_FILES})
-target_link_libraries(llinventory
- ${LLCOMMON_LIBRARIES}
- ${LLMATH_LIBRARIES}
- ${LLMESSAGE_LIBRARIES}
- ${LLXML_LIBRARIES}
- )
#add unit tests
diff --git a/indra/llinventory/llinventory.cpp b/indra/llinventory/llinventory.cpp
index ddeca53fc7..41d58c6deb 100644
--- a/indra/llinventory/llinventory.cpp
+++ b/indra/llinventory/llinventory.cpp
@@ -288,7 +288,15 @@ void LLInventoryObject::setCreationDate(time_t creation_date_utc)
}
+const std::string& LLInventoryItem::getDescription() const
+{
+ return mDescription;
+}
+const std::string& LLInventoryItem::getActualDescription() const
+{
+ return mDescription;
+}
///----------------------------------------------------------------------------
/// Class LLInventoryItem
@@ -389,16 +397,6 @@ void LLInventoryItem::setAssetUUID(const LLUUID& asset_id)
}
-const std::string& LLInventoryItem::getDescription() const
-{
- return mDescription;
-}
-
-const std::string& LLInventoryItem::getActualDescription() const
-{
- return mDescription;
-}
-
U32 LLInventoryItem::getCRC32() const
{
// *FIX: Not a real crc - more of a checksum.
@@ -840,7 +838,7 @@ BOOL LLInventoryItem::importLegacyStream(std::istream& input_stream)
}
else if(0 == strcmp("permissions", keyword))
{
- success = mPermissions.importStream(input_stream);
+ success = mPermissions.importLegacyStream(input_stream);
}
else if(0 == strcmp("sale_info", keyword))
{
@@ -850,7 +848,7 @@ BOOL LLInventoryItem::importLegacyStream(std::istream& input_stream)
// should pick up the vast majority of the tasks.
BOOL has_perm_mask = FALSE;
U32 perm_mask = 0;
- success = mSaleInfo.importStream(input_stream, has_perm_mask, perm_mask);
+ success = mSaleInfo.importLegacyStream(input_stream, has_perm_mask, perm_mask);
if(has_perm_mask)
{
if(perm_mask == PERM_NONE)
@@ -966,7 +964,7 @@ BOOL LLInventoryItem::exportLegacyStream(std::ostream& output_stream, BOOL inclu
output_stream << "\t\titem_id\t" << uuid_str << "\n";
mParentUUID.toString(uuid_str);
output_stream << "\t\tparent_id\t" << uuid_str << "\n";
- mPermissions.exportStream(output_stream);
+ mPermissions.exportLegacyStream(output_stream);
// Check for permissions to see the asset id, and if so write it
// out as an asset id. Otherwise, apply our cheesy encryption.
@@ -1000,7 +998,7 @@ BOOL LLInventoryItem::exportLegacyStream(std::ostream& output_stream, BOOL inclu
std::string buffer;
buffer = llformat( "\t\tflags\t%08x\n", mFlags);
output_stream << buffer;
- mSaleInfo.exportStream(output_stream);
+ mSaleInfo.exportLegacyStream(output_stream);
output_stream << "\t\tname\t" << mName.c_str() << "|\n";
output_stream << "\t\tdesc\t" << mDescription.c_str() << "|\n";
output_stream << "\t\tcreation_date\t" << mCreationDate << "\n";
diff --git a/indra/llinventory/llpermissions.cpp b/indra/llinventory/llpermissions.cpp
index 34354e3e8c..7e013de11a 100644
--- a/indra/llinventory/llpermissions.cpp
+++ b/indra/llinventory/llpermissions.cpp
@@ -572,17 +572,143 @@ void LLPermissions::unpackMessage(LLMessageSystem* msg, const char* block, S32 b
BOOL LLPermissions::importFile(LLFILE* fp)
{
- llifstream ifs(fp);
- return importStream(ifs);
+ 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
+ {
+ llinfos << "unknown keyword " << keyword << " in permissions import" << llendl;
+ }
+ }
+ fix();
+ return TRUE;
}
+
BOOL LLPermissions::exportFile(LLFILE* fp) const
{
- llofstream ofs(fp);
- return exportStream(ofs);
+ 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::importStream(std::istream& input_stream)
+
+BOOL LLPermissions::importLegacyStream(std::istream& input_stream)
{
init(LLUUID::null, LLUUID::null, LLUUID::null, LLUUID::null);
const S32 BUFSIZE = 16384;
@@ -601,18 +727,6 @@ BOOL LLPermissions::importStream(std::istream& input_stream)
while (input_stream.good())
{
input_stream.getline(buffer, BUFSIZE);
- if (input_stream.eof())
- {
- llwarns << "Bad permissions: early end of input stream"
- << llendl;
- return FALSE;
- }
- if (input_stream.fail())
- {
- llwarns << "Bad permissions: failed to read from input stream"
- << llendl;
- return FALSE;
- }
sscanf( /* Flawfinder: ignore */
buffer,
" %255s %255s",
@@ -686,8 +800,7 @@ BOOL LLPermissions::importStream(std::istream& input_stream)
}
else
{
- llwarns << "unknown keyword " << keyword
- << " in permissions import" << llendl;
+ llinfos << "unknown keyword " << keyword << " in permissions import" << llendl;
}
}
fix();
@@ -695,26 +808,36 @@ BOOL LLPermissions::importStream(std::istream& input_stream)
}
-BOOL LLPermissions::exportStream(std::ostream& output_stream) const
+BOOL LLPermissions::exportLegacyStream(std::ostream& output_stream) const
{
- if (!output_stream.good()) return FALSE;
+ std::string uuid_str;
+
output_stream << "\tpermissions 0\n";
output_stream << "\t{\n";
- char prev_fill = output_stream.fill('0');
- output_stream << std::hex;
- output_stream << "\t\tbase_mask\t" << std::setw(8) << mMaskBase << "\n";
- output_stream << "\t\towner_mask\t" << std::setw(8) << mMaskOwner << "\n";
- output_stream << "\t\tgroup_mask\t" << std::setw(8) << mMaskGroup << "\n";
- output_stream << "\t\teveryone_mask\t" << std::setw(8) << mMaskEveryone << "\n";
- output_stream << "\t\tnext_owner_mask\t" << std::setw(8) << mMaskNextOwner << "\n";
- output_stream << std::dec;
- output_stream.fill(prev_fill);
-
- output_stream << "\t\tcreator_id\t" << mCreator << "\n";
- output_stream << "\t\towner_id\t" << mOwner << "\n";
- output_stream << "\t\tlast_owner_id\t" << mLastOwner << "\n";
- output_stream << "\t\tgroup_id\t" << mGroup << "\n";
+ std::string buffer;
+ buffer = llformat( "\t\tbase_mask\t%08x\n", mMaskBase);
+ output_stream << buffer;
+ buffer = llformat( "\t\towner_mask\t%08x\n", mMaskOwner);
+ output_stream << buffer;
+ buffer = llformat( "\t\tgroup_mask\t%08x\n", mMaskGroup);
+ output_stream << buffer;
+ buffer = llformat( "\t\teveryone_mask\t%08x\n", mMaskEveryone);
+ output_stream << buffer;
+ buffer = llformat( "\t\tnext_owner_mask\t%08x\n", mMaskNextOwner);
+ output_stream << buffer;
+
+ mCreator.toString(uuid_str);
+ output_stream << "\t\tcreator_id\t" << uuid_str << "\n";
+
+ mOwner.toString(uuid_str);
+ output_stream << "\t\towner_id\t" << uuid_str << "\n";
+
+ mLastOwner.toString(uuid_str);
+ output_stream << "\t\tlast_owner_id\t" << uuid_str << "\n";
+
+ mGroup.toString(uuid_str);
+ output_stream << "\t\tgroup_id\t" << uuid_str << "\n";
if(mIsGroupOwned)
{
diff --git a/indra/llinventory/llpermissions.h b/indra/llinventory/llpermissions.h
index 7d3a68d353..3ecc922370 100644
--- a/indra/llinventory/llpermissions.h
+++ b/indra/llinventory/llpermissions.h
@@ -316,8 +316,8 @@ public:
BOOL importFile(LLFILE* fp);
BOOL exportFile(LLFILE* fp) const;
- BOOL importStream(std::istream& input_stream);
- BOOL exportStream(std::ostream& output_stream) const;
+ BOOL importLegacyStream(std::istream& input_stream);
+ BOOL exportLegacyStream(std::ostream& output_stream) const;
bool operator==(const LLPermissions &rhs) const;
bool operator!=(const LLPermissions &rhs) const;
diff --git a/indra/llinventory/llsaleinfo.cpp b/indra/llinventory/llsaleinfo.cpp
index a829667933..dd408a8efe 100644
--- a/indra/llinventory/llsaleinfo.cpp
+++ b/indra/llinventory/llsaleinfo.cpp
@@ -81,13 +81,15 @@ U32 LLSaleInfo::getCRC32() const
BOOL LLSaleInfo::exportFile(LLFILE* fp) const
{
- llofstream ofs(fp);
- return exportStream(ofs);
+ 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::exportStream(std::ostream& output_stream) const
+BOOL LLSaleInfo::exportLegacyStream(std::ostream& output_stream) const
{
- if (!output_stream.good()) return FALSE;
output_stream << "\tsale_info\t0\n\t{\n";
output_stream << "\t\tsale_type\t" << lookup(mSaleType) << "\n";
output_stream << "\t\tsale_price\t" << mSalePrice << "\n";
@@ -132,39 +134,80 @@ bool LLSaleInfo::fromLLSD(const LLSD& sd, BOOL& has_perm_mask, U32& perm_mask)
BOOL LLSaleInfo::importFile(LLFILE* fp, BOOL& has_perm_mask, U32& perm_mask)
{
- llifstream ifs(fp);
- return importStream(ifs, has_perm_mask, perm_mask);
-}
-
-BOOL LLSaleInfo::importStream(std::istream& input_stream, BOOL& has_perm_mask, U32& perm_mask)
-{
has_perm_mask = FALSE;
- const S32 BUFSIZE = 16384;
-
// *NOTE: Changing the buffer size will require changing the scanf
// calls below.
- char buffer[BUFSIZE]; /* Flawfinder: ignore */
- char keyword[255]; /* Flawfinder: ignore */
- char valuestr[255]; /* Flawfinder: ignore */
+ 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(input_stream.good())
+ while(success && (!feof(fp)))
{
- input_stream.getline(buffer, MAX_STRING);
- if (input_stream.eof())
+ if (fgets(buffer, MAX_STRING, fp) == NULL)
+ {
+ buffer[0] = '\0';
+ }
+
+ sscanf( /* Flawfinder: ignore */
+ buffer,
+ " %254s %254s",
+ keyword, valuestr);
+ if(!keyword[0])
{
- llwarns << "Bad sale info: early end of input stream"
- << llendl;
- return FALSE;
+ continue;
+ }
+ if(0 == strcmp("{",keyword))
+ {
+ continue;
+ }
+ if(0 == strcmp("}", keyword))
+ {
+ break;
}
- if (input_stream.fail())
+ else if(0 == strcmp("sale_type", keyword))
{
- llwarns << "Bad sale info: failed to read from input stream"
- << llendl;
- return FALSE;
+ 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))
+ {
+ //llinfos << "found deprecated keyword perm_mask" << llendl;
+ has_perm_mask = TRUE;
+ sscanf(valuestr, "%x", &perm_mask);
+ }
+ else
+ {
+ llwarns << "unknown keyword '" << keyword
+ << "' in sale info import" << llendl;
+ }
+ }
+ return success;
+}
+
+BOOL LLSaleInfo::importLegacyStream(std::istream& input_stream, 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 && input_stream.good())
+ {
+ input_stream.getline(buffer, MAX_STRING);
sscanf( /* Flawfinder: ignore */
buffer,
" %254s %254s",
@@ -202,7 +245,7 @@ BOOL LLSaleInfo::importStream(std::istream& input_stream, BOOL& has_perm_mask, U
<< "' in sale info import" << llendl;
}
}
- return TRUE;
+ return success;
}
void LLSaleInfo::setSalePrice(S32 price)
diff --git a/indra/llinventory/llsaleinfo.h b/indra/llinventory/llsaleinfo.h
index f7f3f9269c..4e98ccf6ff 100644
--- a/indra/llinventory/llsaleinfo.h
+++ b/indra/llinventory/llsaleinfo.h
@@ -89,11 +89,11 @@ public:
BOOL exportFile(LLFILE* fp) const;
BOOL importFile(LLFILE* fp, BOOL& has_perm_mask, U32& perm_mask);
- BOOL exportStream(std::ostream& output_stream) const;
+ BOOL exportLegacyStream(std::ostream& output_stream) const;
LLSD asLLSD() const;
operator LLSD() const { return asLLSD(); }
bool fromLLSD(const LLSD& sd, BOOL& has_perm_mask, U32& perm_mask);
- BOOL importStream(std::istream& input_stream, BOOL& has_perm_mask, U32& perm_mask);
+ BOOL importLegacyStream(std::istream& input_stream, BOOL& has_perm_mask, U32& perm_mask);
LLSD packMessage() const;
void unpackMessage(LLSD sales);
diff --git a/indra/test/llpermissions_tut.cpp b/indra/test/llpermissions_tut.cpp
index dff8bca53f..bc2c87ba46 100644
--- a/indra/test/llpermissions_tut.cpp
+++ b/indra/test/llpermissions_tut.cpp
@@ -457,9 +457,9 @@ namespace tut
perm.initMasks(base, ownerp, everyone, groupp, next);
std::ostringstream ostream;
- perm.exportStream(ostream);
+ perm.exportLegacyStream(ostream);
std::istringstream istream(ostream.str());
- perm1.importStream(istream);
+ perm1.importLegacyStream(istream);
ensure_equals("exportStream()/importStream():failed to export and import the data ", perm1, perm);
}
diff --git a/indra/test/llsaleinfo_tut.cpp b/indra/test/llsaleinfo_tut.cpp
index d546803947..2689eaa15e 100644
--- a/indra/test/llsaleinfo_tut.cpp
+++ b/indra/test/llsaleinfo_tut.cpp
@@ -146,13 +146,13 @@ namespace tut
LLSaleInfo llsaleinfo(LLSaleInfo::FS_ORIGINAL, sale_price);
std::ostringstream ostream;
- llsaleinfo.exportStream(ostream);
+ llsaleinfo.exportLegacyStream(ostream);
std::istringstream istream(ostream.str());
LLSaleInfo llsaleinfo1;
U32 perm_mask = 0;
BOOL has_perm_mask = FALSE;
- llsaleinfo1.importStream(istream, has_perm_mask, perm_mask);
+ llsaleinfo1.importLegacyStream(istream, has_perm_mask, perm_mask);
ensure("importStream() fn failed ",
llsaleinfo.getSalePrice() == llsaleinfo1.getSalePrice() &&