summaryrefslogtreecommitdiff
path: root/indra/llfilesystem
diff options
context:
space:
mode:
authorCallum Prentice <callum@lindenlab.com>2021-03-09 18:33:35 -0800
committerCallum Prentice <callum@lindenlab.com>2021-03-09 18:33:35 -0800
commitd7518c7b4f5eca731d0ea143bab34b279bd4ee13 (patch)
tree2c8955444b44bb88ae89e451fe17c0144984b929 /indra/llfilesystem
parent168d177197bd7558bbe0ca13d01c984ad8638da7 (diff)
Ansariel kindly offered their patch to help mitigate this round of file system issues - taken from https://vcs.firestormviewer.org/phoenix-firestorm/changeset/104a8600946be01e2de44d10ad069ba854272d1f
Diffstat (limited to 'indra/llfilesystem')
-rw-r--r--indra/llfilesystem/lldiskcache.cpp4
-rw-r--r--indra/llfilesystem/llfilesystem.cpp27
2 files changed, 29 insertions, 2 deletions
diff --git a/indra/llfilesystem/lldiskcache.cpp b/indra/llfilesystem/lldiskcache.cpp
index c9f7684b5a..61eb654693 100644
--- a/indra/llfilesystem/lldiskcache.cpp
+++ b/indra/llfilesystem/lldiskcache.cpp
@@ -192,8 +192,8 @@ const std::string LLDiskCache::metaDataToFilepath(const std::string id,
file_path << id;
file_path << "_";
file_path << (extra_info.empty() ? "0" : extra_info);
- //file_path << "_";
- //file_path << assetTypeToString(at); // see SL-14210 Prune descriptive tag from new cache filenames
+ file_path << "_";
+ file_path << assetTypeToString(at); // see SL-14210 Prune descriptive tag from new cache filenames
// for details of why it was removed. Note that if you put it
// back or change the format of the filename, the cache files
// files will be invalidated (and perhaps, more importantly,
diff --git a/indra/llfilesystem/llfilesystem.cpp b/indra/llfilesystem/llfilesystem.cpp
index 053b52014e..da44e8d98c 100644
--- a/indra/llfilesystem/llfilesystem.cpp
+++ b/indra/llfilesystem/llfilesystem.cpp
@@ -200,9 +200,36 @@ BOOL LLFileSystem::write(const U8* buffer, S32 bytes)
{
ofs.write((const char*)buffer, bytes);
+ mPosition = ofs.tellp(); // <FS:Ansariel> Fix asset caching
+
+ success = TRUE;
+ }
+ }
+ // <FS:Ansariel> Fix asset caching
+ else if (mMode == READ_WRITE)
+ {
+ // Don't truncate if file already exists
+ llofstream ofs(filename, std::ios::in | std::ios::binary);
+ if (ofs)
+ {
+ ofs.seekp(mPosition, std::ios::beg);
+ ofs.write((const char*)buffer, bytes);
+ mPosition += bytes;
success = TRUE;
}
+ else
+ {
+ // File doesn't exist - open in write mode
+ ofs.open(filename, std::ios::binary);
+ if (ofs.is_open())
+ {
+ ofs.write((const char*)buffer, bytes);
+ mPosition += bytes;
+ success = TRUE;
+ }
+ }
}
+ // </FS:Ansariel>
else
{
llofstream ofs(filename, std::ios::binary);