[Scummvm-git-logs] scummvm master -> 662e9794ad3241978f68fa6e313f0a257c4f207b
dreammaster
noreply at scummvm.org
Sat Apr 9 05:18:02 UTC 2022
This automated email contains information about 10 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
0408ce2b72 AGS: Fixed unnecessary registration of empty optional data paths
96af8f6ff2 AGS: Updated build version (3.5.1.13)
81ea142e4f AGS: Little code cleanup in room_file.cpp
9f05a91eb5 AGS: Fixed engine crash in case of too many reserved channels
cd081450af AGS: Fix potentially invalid frame during Character turning
81bb88f99e AGS: Fixed AlignedStream::Read/WriteByte() returning wrong type
0a819e0c8b AGS: Fixed MemoryStream's second ctor not initializing one member
2706e9f3a5 AGS: Fixed bpp check in SpriteFile::CreateIndexedBitmap()
af203d0da5 AGS: Removed guis list param from GUI:ReadGUI and WriteGUI (useless)
662e9794ad AGS: Remove excessive validity checks in stream classes
Commit: 0408ce2b725af53b5e6ad5e021e9c998fab2aefb
https://github.com/scummvm/scummvm/commit/0408ce2b725af53b5e6ad5e021e9c998fab2aefb
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2022-04-08T22:17:50-07:00
Commit Message:
AGS: Fixed unnecessary registration of empty optional data paths
>From upstream af24f3c307b3080e4ec8a7215dcac496f9ce38c6
Changed paths:
engines/ags/engine/ac/file.cpp
engines/ags/engine/ac/speech.cpp
engines/ags/engine/main/engine.cpp
diff --git a/engines/ags/engine/ac/file.cpp b/engines/ags/engine/ac/file.cpp
index bd2d5695e0b..c2287d3d2d2 100644
--- a/engines/ags/engine/ac/file.cpp
+++ b/engines/ags/engine/ac/file.cpp
@@ -524,7 +524,8 @@ String find_assetlib(const String &filename) {
String libname = File::FindFileCI(_GP(ResPaths).DataDir, filename);
if (AssetManager::IsDataFile(libname))
return libname;
- if (Path::ComparePaths(_GP(ResPaths).DataDir, _GP(ResPaths).DataDir2) != 0) {
+ if (!_GP(ResPaths).DataDir2.IsEmpty() &&
+ Path::ComparePaths(_GP(ResPaths).DataDir, _GP(ResPaths).DataDir2) != 0) {
// Hack for running in Debugger
libname = File::FindFileCI(_GP(ResPaths).DataDir2, filename);
if (AssetManager::IsDataFile(libname))
diff --git a/engines/ags/engine/ac/speech.cpp b/engines/ags/engine/ac/speech.cpp
index a83f4e2a38a..1d491b09561 100644
--- a/engines/ags/engine/ac/speech.cpp
+++ b/engines/ags/engine/ac/speech.cpp
@@ -113,7 +113,8 @@ bool init_voicepak(const String &name) {
}
String speech_subdir = "";
- if (!_GP(ResPaths).VoiceDir2.IsEmpty() && Path::ComparePaths(_GP(ResPaths).DataDir, _GP(ResPaths).VoiceDir2) != 0) {
+ if (!_GP(ResPaths).VoiceDir2.IsEmpty() &&
+ !_GP(ResPaths).VoiceDir2.IsEmpty() && Path::ComparePaths(_GP(ResPaths).DataDir, _GP(ResPaths).VoiceDir2) != 0) {
// If we have custom voice directory set, we will enable voice-over even if speech.vox does not exist
speech_subdir = name.IsEmpty() ? _GP(ResPaths).VoiceDir2 : Path::ConcatPaths(_GP(ResPaths).VoiceDir2, name);
if (File::IsDirectory(speech_subdir)) {
diff --git a/engines/ags/engine/main/engine.cpp b/engines/ags/engine/main/engine.cpp
index 3266515a786..c955f7387aa 100644
--- a/engines/ags/engine/main/engine.cpp
+++ b/engines/ags/engine/main/engine.cpp
@@ -284,7 +284,8 @@ void engine_locate_audio_pak() {
_G(platform)->DisplayAlert("Unable to initialize digital audio pack '%s', file could be corrupt or of unsupported format.",
music_file.GetCStr());
}
- } else if (Path::ComparePaths(_GP(ResPaths).DataDir, _GP(ResPaths).AudioDir2) != 0) {
+ } else if (!_GP(ResPaths).AudioDir2.IsEmpty() &&
+ Path::ComparePaths(_GP(ResPaths).DataDir, _GP(ResPaths).AudioDir2) != 0) {
Debug::Printf(kDbgMsg_Info, "Audio pack was not found, but explicit audio directory is defined.");
}
}
Commit: 96af8f6ff24ec82d5b599d7dc9f8ac12df053762
https://github.com/scummvm/scummvm/commit/96af8f6ff24ec82d5b599d7dc9f8ac12df053762
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2022-04-08T22:17:50-07:00
Commit Message:
AGS: Updated build version (3.5.1.13)
>From upstream 3c92243d5340207e039e47dfc8e75b70f427e9dc
Changed paths:
engines/ags/shared/core/def_version.h
diff --git a/engines/ags/shared/core/def_version.h b/engines/ags/shared/core/def_version.h
index 418939c1a5b..c6a02278c5d 100644
--- a/engines/ags/shared/core/def_version.h
+++ b/engines/ags/shared/core/def_version.h
@@ -22,9 +22,9 @@
#ifndef AGS_SHARED_CORE_DEFVERSION_H
#define AGS_SHARED_CORE_DEFVERSION_H
-#define ACI_VERSION_STR "3.6.0.12"
+#define ACI_VERSION_STR "3.6.0.13"
#if defined (RC_INVOKED) // for MSVC resource compiler
-#define ACI_VERSION_MSRC_DEF 3.6.0.12
+#define ACI_VERSION_MSRC_DEF 3.6.0.13
#endif
#define SPECIAL_VERSION ""
Commit: 81ea142e4fbb12e6c930646ee67c594f3d20eba9
https://github.com/scummvm/scummvm/commit/81ea142e4fbb12e6c930646ee67c594f3d20eba9
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2022-04-08T22:17:50-07:00
Commit Message:
AGS: Little code cleanup in room_file.cpp
>From upstream d3ae5106d0e0ca43b3fb8b397a9faabff77f54b2
Changed paths:
engines/ags/shared/game/room_file.cpp
engines/ags/shared/util/compress.cpp
engines/ags/shared/util/compress.h
diff --git a/engines/ags/shared/game/room_file.cpp b/engines/ags/shared/game/room_file.cpp
index f8f235ada69..cbaa7b3c35e 100644
--- a/engines/ags/shared/game/room_file.cpp
+++ b/engines/ags/shared/game/room_file.cpp
@@ -293,34 +293,25 @@ HError ReadMainBlock(RoomStruct *room, Stream *in, RoomFileVersion data_ver) {
}
update_polled_stuff_if_runtime();
- // Primary background
- Bitmap *mask = nullptr;
+ // Primary background (LZW or RLE compressed depending on format)
if (data_ver >= kRoomVersion_pre114_5)
- load_lzw(in, &mask, room->BackgroundBPP, &room->Palette);
+ room->BgFrames[0].Graphic.reset(
+ load_lzw(in, room->BackgroundBPP, &room->Palette));
else
- mask = load_rle_bitmap8(in);
- room->BgFrames[0].Graphic.reset(mask);
+ room->BgFrames[0].Graphic.reset(load_rle_bitmap8(in));
+ // Area masks
update_polled_stuff_if_runtime();
- // Mask bitmaps
- if (data_ver >= kRoomVersion_255b) {
- mask = load_rle_bitmap8(in);
- } else if (data_ver >= kRoomVersion_114) {
- // an old version - clear the 'shadow' area into a blank regions bmp
- mask = load_rle_bitmap8(in);
- delete mask;
- mask = nullptr;
- }
- room->RegionMask.reset(mask);
+ if (data_ver >= kRoomVersion_255b)
+ room->RegionMask.reset(load_rle_bitmap8(in));
+ else if (data_ver >= kRoomVersion_114)
+ skip_rle_bitmap8(in); // an old version - clear the 'shadow' area into a blank regions bmp (???)
update_polled_stuff_if_runtime();
- mask = load_rle_bitmap8(in);
- room->WalkAreaMask.reset(mask);
+ room->WalkAreaMask.reset(load_rle_bitmap8(in));
update_polled_stuff_if_runtime();
- mask = load_rle_bitmap8(in);
- room->WalkBehindMask.reset(mask);
+ room->WalkBehindMask.reset(load_rle_bitmap8(in));
update_polled_stuff_if_runtime();
- mask = load_rle_bitmap8(in);
- room->HotspotMask.reset(mask);
+ room->HotspotMask.reset(load_rle_bitmap8(in));
return HError::None();
}
@@ -389,9 +380,8 @@ HError ReadAnimBgBlock(RoomStruct *room, Stream *in, RoomFileVersion data_ver) {
for (size_t i = 1; i < room->BgFrameCount; ++i) {
update_polled_stuff_if_runtime();
- Bitmap *frame = nullptr;
- load_lzw(in, &frame, room->BackgroundBPP, &room->BgFrames[i].Palette);
- room->BgFrames[i].Graphic.reset(frame);
+ room->BgFrames[i].Graphic.reset(
+ load_lzw(in, room->BackgroundBPP, &room->BgFrames[i].Palette));
}
return HError::None();
}
diff --git a/engines/ags/shared/util/compress.cpp b/engines/ags/shared/util/compress.cpp
index 2fc6ab3e33d..d8aad60bda7 100644
--- a/engines/ags/shared/util/compress.cpp
+++ b/engines/ags/shared/util/compress.cpp
@@ -315,6 +315,13 @@ Shared::Bitmap *load_rle_bitmap8(Stream *in, RGB(*pal)[256]) {
return bmp;
}
+void skip_rle_bitmap8(Shared::Stream *in) {
+ int w = in->ReadInt16();
+ int h = in->ReadInt16();
+ // Skip 8-bit pixel data + RGB palette
+ in->Seek((w * h) + (3 * 256));
+}
+
//-----------------------------------------------------------------------------
// LZW
//-----------------------------------------------------------------------------
@@ -378,8 +385,7 @@ void save_lzw(Stream *out, const Bitmap *bmpp, const RGB(*pal)[256]) {
out->Seek(toret, kSeekBegin);
}
-void load_lzw(Stream *in, Bitmap **dst_bmp, int dst_bpp, RGB(*pal)[256]) {
- *dst_bmp = nullptr;
+Bitmap *load_lzw(Stream *in, int dst_bpp, RGB(*pal)[256]) {
// NOTE: old format saves full RGB struct here (4 bytes, including the filler)
if (pal)
in->Read(*pal, sizeof(RGB) * 256);
@@ -401,8 +407,7 @@ void load_lzw(Stream *in, Bitmap **dst_bmp, int dst_bpp, RGB(*pal)[256]) {
int stride = mem_in.ReadInt32(); // width * bpp
int height = mem_in.ReadInt32();
Bitmap *bmm = BitmapHelper::CreateBitmap((stride / dst_bpp), height, dst_bpp * 8);
- if (bmm == nullptr)
- return; // out of mem?
+ if (!bmm) return nullptr; // out of mem?
size_t num_pixels = stride * height / dst_bpp;
uint8_t *bmp_data = bmm->GetDataForWriting();
@@ -416,7 +421,7 @@ void load_lzw(Stream *in, Bitmap **dst_bmp, int dst_bpp, RGB(*pal)[256]) {
if (in->GetPosition() != end_pos)
in->Seek(end_pos, kSeekBegin);
- *dst_bmp = bmm;
+ return bmm;
}
} // namespace AGS3
diff --git a/engines/ags/shared/util/compress.h b/engines/ags/shared/util/compress.h
index b4824a28104..d0c43c64d69 100644
--- a/engines/ags/shared/util/compress.h
+++ b/engines/ags/shared/util/compress.h
@@ -42,6 +42,8 @@ void rle_decompress(uint8_t *data, size_t data_sz, int image_bpp, Shared::Stream
void save_rle_bitmap8(Shared::Stream *out, const Shared::Bitmap *bmp, const RGB(*pal)[256] = nullptr);
// Reads a 8-bit bitmap with palette from the stream and unpacks from RLE
Shared::Bitmap *load_rle_bitmap8(Shared::Stream *in, RGB(*pal)[256] = nullptr);
+// Skips the 8-bit RLE bitmap
+void skip_rle_bitmap8(Shared::Stream *in);
// LZW compression
void lzw_compress(const uint8_t *data, size_t data_sz, int image_bpp, Shared::Stream *out);
@@ -49,7 +51,7 @@ void lzw_decompress(uint8_t *data, size_t data_sz, int image_bpp, Shared::Stream
// Saves bitmap with an optional palette compressed by LZW
void save_lzw(Shared::Stream *out, const Shared::Bitmap *bmpp, const RGB(*pal)[256] = nullptr);
// Loads bitmap decompressing
-void load_lzw(Shared::Stream *in, Shared::Bitmap **bmm, int dst_bpp, RGB(*pal)[256] = nullptr);
+Shared::Bitmap *load_lzw(Shared::Stream *in, int dst_bpp, RGB(*pal)[256] = nullptr);
} // namespace AGS3
Commit: 9f05a91eb52e65f60986af5508026e50840babf1
https://github.com/scummvm/scummvm/commit/9f05a91eb52e65f60986af5508026e50840babf1
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2022-04-08T22:17:51-07:00
Commit Message:
AGS: Fixed engine crash in case of too many reserved channels
>From upstream b954ad324b6d0bc6b981419093c53062fc11f1f5
Changed paths:
engines/ags/engine/media/audio/audio.cpp
engines/ags/engine/media/audio/audio_defines.h
diff --git a/engines/ags/engine/media/audio/audio.cpp b/engines/ags/engine/media/audio/audio.cpp
index 75fcf729696..aa99c4c9976 100644
--- a/engines/ags/engine/media/audio/audio.cpp
+++ b/engines/ags/engine/media/audio/audio.cpp
@@ -157,7 +157,8 @@ static int find_free_audio_channel(ScriptAudioClip *clip, int priority, bool int
if (_GP(game).audioClipTypes[clip->type].reservedChannels > 0) {
startAtChannel = 0;
for (int i = 0; i < clip->type; i++) {
- startAtChannel += _GP(game).audioClipTypes[i].reservedChannels;
+ startAtChannel += MIN(MAX_SOUND_CHANNELS,
+ _GP(game).audioClipTypes[i].reservedChannels);
}
endBeforeChannel = MIN(_GP(game).numGameChannels,
startAtChannel + _GP(game).audioClipTypes[clip->type].reservedChannels);
diff --git a/engines/ags/engine/media/audio/audio_defines.h b/engines/ags/engine/media/audio/audio_defines.h
index 8d9e428108b..fd35f7e1b20 100644
--- a/engines/ags/engine/media/audio/audio_defines.h
+++ b/engines/ags/engine/media/audio/audio_defines.h
@@ -30,6 +30,7 @@
// Max channels that are distributed among game's audio types
#define MAX_GAME_CHANNELS 16
+#define MAX_SOUND_CHANNELS 8
#define SPECIAL_CROSSFADE_CHANNEL (MAX_GAME_CHANNELS)
// Total number of channels: game chans + utility chans
#define TOTAL_AUDIO_CHANNELS (MAX_GAME_CHANNELS + 1)
Commit: cd081450afe2ad4386b561afd2db3ddb63b126cd
https://github.com/scummvm/scummvm/commit/cd081450afe2ad4386b561afd2db3ddb63b126cd
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2022-04-08T22:17:51-07:00
Commit Message:
AGS: Fix potentially invalid frame during Character turning
>From upstream dffea8cf0dbba1431ec1b07c724a5d362ae8179b
Changed paths:
engines/ags/engine/ac/character_info_engine.cpp
diff --git a/engines/ags/engine/ac/character_info_engine.cpp b/engines/ags/engine/ac/character_info_engine.cpp
index 1f203f3da6c..d30c4f7f005 100644
--- a/engines/ags/engine/ac/character_info_engine.cpp
+++ b/engines/ags/engine/ac/character_info_engine.cpp
@@ -151,6 +151,7 @@ int CharacterInfo::update_character_walking(CharacterExtras *chex) {
loop = turnlooporder[wantloop];
if (frame >= _GP(views)[view].loops[loop].numFrames)
frame = 0; // AVD: make sure the loop always has a valid frame
+ if (frame >= _GP(views)[view].loops[loop].numFrames) frame = 0; // AVD: make sure the loop always has a valid frame
walking -= TURNING_AROUND;
// if still turning, wait for next frame
if (walking % TURNING_BACKWARDS >= TURNING_AROUND)
Commit: 81bb88f99e4ba3bd05314f98b807b93b013e1a98
https://github.com/scummvm/scummvm/commit/81bb88f99e4ba3bd05314f98b807b93b013e1a98
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2022-04-08T22:17:51-07:00
Commit Message:
AGS: Fixed AlignedStream::Read/WriteByte() returning wrong type
>From upstream 5453cdfdd6c680c2da7206a240a96d90bae9ffd8
Changed paths:
engines/ags/shared/util/aligned_stream.cpp
diff --git a/engines/ags/shared/util/aligned_stream.cpp b/engines/ags/shared/util/aligned_stream.cpp
index e1c87f5452f..b0cec28bb3f 100644
--- a/engines/ags/shared/util/aligned_stream.cpp
+++ b/engines/ags/shared/util/aligned_stream.cpp
@@ -80,7 +80,7 @@ size_t AlignedStream::Read(void *buffer, size_t size) {
}
int32_t AlignedStream::ReadByte() {
- uint8_t b = 0;
+ uint32_t b = 0;
if (_stream) {
ReadPadding(sizeof(uint8_t));
b = _stream->ReadByte();
@@ -172,9 +172,9 @@ size_t AlignedStream::Write(const void *buffer, size_t size) {
int32_t AlignedStream::WriteByte(uint8_t b) {
if (_stream) {
WritePadding(sizeof(uint8_t));
- b = _stream->WriteByte(b);
+ int32_t res = _stream->WriteByte(b);
_block += sizeof(uint8_t);
- return b;
+ return res;
}
return 0;
}
Commit: 0a819e0c8b79c0f966095746178192f107142a80
https://github.com/scummvm/scummvm/commit/0a819e0c8b79c0f966095746178192f107142a80
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2022-04-08T22:17:51-07:00
Commit Message:
AGS: Fixed MemoryStream's second ctor not initializing one member
>From upstream a542048fd940e450db99522e9b67ec198a83b643
Changed paths:
engines/ags/shared/util/memory_stream.cpp
diff --git a/engines/ags/shared/util/memory_stream.cpp b/engines/ags/shared/util/memory_stream.cpp
index 402f913d3cf..2f34f65bfd7 100644
--- a/engines/ags/shared/util/memory_stream.cpp
+++ b/engines/ags/shared/util/memory_stream.cpp
@@ -42,7 +42,7 @@ MemoryStream::MemoryStream(uint8_t *buf, size_t buf_sz, StreamWorkMode mode, Dat
, _buf_sz(buf_sz)
, _len(0)
, _cbuf(nullptr)
- , _mode(kStream_Read)
+ , _mode(mode)
, _pos(0) {
}
Commit: 2706e9f3a530ca7315ca6ff4c03c6b1a11af3d64
https://github.com/scummvm/scummvm/commit/2706e9f3a530ca7315ca6ff4c03c6b1a11af3d64
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2022-04-08T22:17:51-07:00
Commit Message:
AGS: Fixed bpp check in SpriteFile::CreateIndexedBitmap()
>From upstream 9ce174c0c3c30e91170c4c508fb62d2743b19d09
Changed paths:
engines/ags/shared/ac/sprite_file.cpp
diff --git a/engines/ags/shared/ac/sprite_file.cpp b/engines/ags/shared/ac/sprite_file.cpp
index 07a0820c455..6d1d8ee0a1e 100644
--- a/engines/ags/shared/ac/sprite_file.cpp
+++ b/engines/ags/shared/ac/sprite_file.cpp
@@ -67,6 +67,7 @@ static size_t lookup_palette(uint32_t col, uint32_t palette[256], uint32_t ncols
static bool CreateIndexedBitmap(const Bitmap *image, std::vector<uint8_t> &dst_data,
uint32_t palette[256], uint32_t &pal_count) {
const int src_bpp = image->GetBPP();
+ if (src_bpp < 2) { assert(0); return false; }
const size_t src_size = image->GetWidth() * image->GetHeight() * image->GetBPP();
const size_t dst_size = image->GetWidth() * image->GetHeight();
dst_data.resize(dst_size);
@@ -86,7 +87,7 @@ static bool CreateIndexedBitmap(const Bitmap *image, std::vector<uint8_t> &dst_d
col = *((const uint32_t *)src);
pal_n = lookup_palette(col, palette, pal_count);
break;
- default: assert(0); break;
+ default: assert(0); return false;
}
if ((int)pal_n == -1) {
Commit: af203d0da5311e1ddf4488f9bb59936d6152d34e
https://github.com/scummvm/scummvm/commit/af203d0da5311e1ddf4488f9bb59936d6152d34e
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2022-04-08T22:17:52-07:00
Commit Message:
AGS: Removed guis list param from GUI:ReadGUI and WriteGUI (useless)
>From upstream 08c64d187b56e042e2d09f11f76ebb5db6d3007c
Changed paths:
engines/ags/engine/game/savegame_v321.cpp
engines/ags/shared/game/main_game_file.cpp
engines/ags/shared/gui/gui_main.cpp
engines/ags/shared/gui/gui_main.h
diff --git a/engines/ags/engine/game/savegame_v321.cpp b/engines/ags/engine/game/savegame_v321.cpp
index 47ee3e2061b..82321432b30 100644
--- a/engines/ags/engine/game/savegame_v321.cpp
+++ b/engines/ags/engine/game/savegame_v321.cpp
@@ -220,7 +220,7 @@ static void ReadAnimatedButtons_Aligned(Stream *in) {
}
static HSaveError restore_game_gui(Stream *in, int numGuisWas) {
- HError err = GUI::ReadGUI(_GP(guis), in, true);
+ HError err = GUI::ReadGUI(in, true);
if (!err)
return new SavegameError(kSvgErr_GameObjectInitFailed, err);
_GP(game).numgui = _GP(guis).size();
diff --git a/engines/ags/shared/game/main_game_file.cpp b/engines/ags/shared/game/main_game_file.cpp
index b5c465a510c..cb79f70dfdb 100644
--- a/engines/ags/shared/game/main_game_file.cpp
+++ b/engines/ags/shared/game/main_game_file.cpp
@@ -793,7 +793,7 @@ HGameFileError ReadGameData(LoadedGameEntities &ents, Stream *in, GameDataVersio
ReadDialogs(ents.Dialogs, ents.OldDialogScripts, ents.OldDialogSources, ents.OldSpeechLines,
in, data_ver, game.numdialog);
- HError err2 = GUI::ReadGUI(_GP(guis), in);
+ HError err2 = GUI::ReadGUI(in);
if (!err2)
return new MainGameFileError(kMGFErr_GameEntityFailed, err2);
game.numgui = _GP(guis).size();
diff --git a/engines/ags/shared/gui/gui_main.cpp b/engines/ags/shared/gui/gui_main.cpp
index 3d4af681c64..8225ee3707a 100644
--- a/engines/ags/shared/gui/gui_main.cpp
+++ b/engines/ags/shared/gui/gui_main.cpp
@@ -752,7 +752,7 @@ HError ResortGUI(std::vector<GUIMain> &theGuis, bool bwcompat_ctrl_zorder = fals
return HError::None();
}
-HError ReadGUI(std::vector<GUIMain> &guis, Stream *in, bool is_savegame) {
+HError ReadGUI(Stream *in, bool is_savegame) {
if (in->ReadInt32() != (int)GUIMAGIC)
return new Error("ReadGUI: unknown format or file is corrupt");
@@ -767,7 +767,7 @@ HError ReadGUI(std::vector<GUIMain> &guis, Stream *in, bool is_savegame) {
GameGuiVersion, kGuiVersion_Initial, kGuiVersion_Current));
else
gui_count = in->ReadInt32();
- guis.resize(gui_count);
+ _GP(guis).resize(gui_count);
// import the main GUI elements
for (size_t i = 0; i < gui_count; ++i) {
@@ -853,15 +853,15 @@ HError ReadGUI(std::vector<GUIMain> &guis, Stream *in, bool is_savegame) {
_GP(guilist)[i].ReadFromFile(in, GameGuiVersion);
}
}
- return ResortGUI(guis, GameGuiVersion < kGuiVersion_272e);
+ return ResortGUI(_GP(guis), GameGuiVersion < kGuiVersion_272e);
}
-void WriteGUI(const std::vector<GUIMain> &guis, Stream *out) {
+void WriteGUI(Stream *out) {
out->WriteInt32(GUIMAGIC);
out->WriteInt32(kGuiVersion_Current);
- out->WriteInt32(guis.size());
+ out->WriteInt32(_GP(guis).size());
- for (size_t i = 0; i < guis.size(); ++i) {
+ for (size_t i = 0; i < _GP(guis).size(); ++i) {
_GP(guis)[i].WriteToFile(out);
}
out->WriteInt32(_G(numguibuts));
diff --git a/engines/ags/shared/gui/gui_main.h b/engines/ags/shared/gui/gui_main.h
index 2ebdc60f0a8..bf855794760 100644
--- a/engines/ags/shared/gui/gui_main.h
+++ b/engines/ags/shared/gui/gui_main.h
@@ -226,10 +226,14 @@ void MarkInventoryForUpdate(int char_id, bool is_player);
// Parses the string and returns combination of label macro flags
GUILabelMacro FindLabelMacros(const String &text);
+// Reads all GUIs and their controls.
+// WARNING: the data is read into the global arrays (guis, guibuts, and so on)
// TODO: remove is_savegame param after dropping support for old saves
// because only they use ReadGUI to read runtime GUI data
-HError ReadGUI(std::vector<GUIMain> &guis, Stream *in, bool is_savegame = false);
-void WriteGUI(const std::vector<GUIMain> &guis, Stream *out);
+HError ReadGUI(Stream *in, bool is_savegame = false);
+// Writes all GUIs and their controls.
+// WARNING: the data is written from the global arrays (guis, guibuts, and so on)
+void WriteGUI(Stream *out);
// Converts legacy GUIVisibility into appropriate GUIMain properties
void ApplyLegacyVisibility(GUIMain &gui, LegacyGUIVisState vis);
}
Commit: 662e9794ad3241978f68fa6e313f0a257c4f207b
https://github.com/scummvm/scummvm/commit/662e9794ad3241978f68fa6e313f0a257c4f207b
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2022-04-08T22:17:52-07:00
Commit Message:
AGS: Remove excessive validity checks in stream classes
>From upstream 3ed254586a28e2f8ebe0e81b7a44270f3736efd6
Changed paths:
engines/ags/shared/gui/gui_main.cpp
engines/ags/shared/util/aligned_stream.cpp
engines/ags/shared/util/data_stream.cpp
engines/ags/shared/util/file_stream.cpp
engines/ags/shared/util/memory_stream.cpp
engines/ags/shared/util/proxy_stream.cpp
engines/ags/shared/util/text_stream_reader.cpp
engines/ags/shared/util/text_stream_writer.cpp
diff --git a/engines/ags/shared/gui/gui_main.cpp b/engines/ags/shared/gui/gui_main.cpp
index 8225ee3707a..35593916d3b 100644
--- a/engines/ags/shared/gui/gui_main.cpp
+++ b/engines/ags/shared/gui/gui_main.cpp
@@ -863,7 +863,7 @@ void WriteGUI(Stream *out) {
for (size_t i = 0; i < _GP(guis).size(); ++i) {
_GP(guis)[i].WriteToFile(out);
- }
+ }
out->WriteInt32(_G(numguibuts));
for (int i = 0; i < _G(numguibuts); ++i) {
_GP(guibuts)[i].WriteToFile(out);
diff --git a/engines/ags/shared/util/aligned_stream.cpp b/engines/ags/shared/util/aligned_stream.cpp
index b0cec28bb3f..a868cbbf329 100644
--- a/engines/ags/shared/util/aligned_stream.cpp
+++ b/engines/ags/shared/util/aligned_stream.cpp
@@ -40,28 +40,20 @@ AlignedStream::~AlignedStream() {
}
void AlignedStream::Reset() {
- if (!_stream) {
- return;
- }
-
FinalizeBlock();
}
void AlignedStream::Close() {
- if (!_stream) {
- return;
- }
-
FinalizeBlock();
ProxyStream::Close();
}
bool AlignedStream::CanRead() const {
- return _stream ? (_mode == kAligned_Read && _stream->CanRead()) : false;
+ return (_mode == kAligned_Read && _stream->CanRead());
}
bool AlignedStream::CanWrite() const {
- return _stream ? (_mode == kAligned_Write && _stream->CanWrite()) : false;
+ return (_mode == kAligned_Write && _stream->CanWrite());
}
bool AlignedStream::CanSeek() const {
@@ -70,183 +62,129 @@ bool AlignedStream::CanSeek() const {
}
size_t AlignedStream::Read(void *buffer, size_t size) {
- if (_stream) {
- ReadPadding(sizeof(int8_t));
- size = _stream->Read(buffer, size);
- _block += size;
- return size;
- }
- return 0;
+ ReadPadding(sizeof(int8_t));
+ size = _stream->Read(buffer, size);
+ _block += size;
+ return size;
}
int32_t AlignedStream::ReadByte() {
- uint32_t b = 0;
- if (_stream) {
- ReadPadding(sizeof(uint8_t));
- b = _stream->ReadByte();
- _block += sizeof(uint8_t);
- }
+ ReadPadding(sizeof(uint8_t));
+ int32_t b = _stream->ReadByte();
+ _block += sizeof(uint8_t);
return b;
}
int16_t AlignedStream::ReadInt16() {
- int16_t val = 0;
- if (_stream) {
- ReadPadding(sizeof(int16_t));
- val = _stream->ReadInt16();
- _block += sizeof(int16_t);
- }
+ ReadPadding(sizeof(int16_t));
+ int16_t val = _stream->ReadInt16();
+ _block += sizeof(int16_t);
return val;
}
int32_t AlignedStream::ReadInt32() {
- int32_t val = 0;
- if (_stream) {
- ReadPadding(sizeof(int32_t));
- val = _stream->ReadInt32();
- _block += sizeof(int32_t);
- }
+ ReadPadding(sizeof(int32_t));
+ int32_t val = _stream->ReadInt32();
+ _block += sizeof(int32_t);
return val;
}
int64_t AlignedStream::ReadInt64() {
- int64_t val = 0;
- if (_stream) {
- ReadPadding(sizeof(int64_t));
- val = _stream->ReadInt64();
- _block += sizeof(int64_t);
- }
+ ReadPadding(sizeof(int64_t));
+ int64_t val = _stream->ReadInt64();
+ _block += sizeof(int64_t);
return val;
}
size_t AlignedStream::ReadArray(void *buffer, size_t elem_size, size_t count) {
- if (_stream) {
- ReadPadding(elem_size);
- count = _stream->ReadArray(buffer, elem_size, count);
- _block += count * elem_size;
- return count;
- }
- return 0;
+ ReadPadding(elem_size);
+ count = _stream->ReadArray(buffer, elem_size, count);
+ _block += count * elem_size;
+ return count;
}
size_t AlignedStream::ReadArrayOfInt16(int16_t *buffer, size_t count) {
- if (_stream) {
- ReadPadding(sizeof(int16_t));
- count = _stream->ReadArrayOfInt16(buffer, count);
- _block += count * sizeof(int16_t);
- return count;
- }
- return 0;
+ ReadPadding(sizeof(int16_t));
+ count = _stream->ReadArrayOfInt16(buffer, count);
+ _block += count * sizeof(int16_t);
+ return count;
}
size_t AlignedStream::ReadArrayOfInt32(int32_t *buffer, size_t count) {
- if (_stream) {
- ReadPadding(sizeof(int32_t));
- count = _stream->ReadArrayOfInt32(buffer, count);
- _block += count * sizeof(int32_t);
- return count;
- }
- return 0;
+ ReadPadding(sizeof(int32_t));
+ count = _stream->ReadArrayOfInt32(buffer, count);
+ _block += count * sizeof(int32_t);
+ return count;
}
size_t AlignedStream::ReadArrayOfInt64(int64_t *buffer, size_t count) {
- if (_stream) {
- ReadPadding(sizeof(int64_t));
- count = _stream->ReadArrayOfInt64(buffer, count);
- _block += count * sizeof(int64_t);
- return count;
- }
- return 0;
+ ReadPadding(sizeof(int64_t));
+ count = _stream->ReadArrayOfInt64(buffer, count);
+ _block += count * sizeof(int64_t);
+ return count;
}
size_t AlignedStream::Write(const void *buffer, size_t size) {
- if (_stream) {
- WritePadding(sizeof(int8_t));
- size = _stream->Write(buffer, size);
- _block += size;
- return size;
- }
- return 0;
+ WritePadding(sizeof(int8_t));
+ size = _stream->Write(buffer, size);
+ _block += size;
+ return size;
}
int32_t AlignedStream::WriteByte(uint8_t b) {
- if (_stream) {
- WritePadding(sizeof(uint8_t));
- int32_t res = _stream->WriteByte(b);
- _block += sizeof(uint8_t);
- return res;
- }
- return 0;
+ WritePadding(sizeof(uint8_t));
+ int32_t res = _stream->WriteByte(b);
+ _block += sizeof(uint8_t);
+ return res;
}
size_t AlignedStream::WriteInt16(int16_t val) {
- if (_stream) {
- WritePadding(sizeof(int16_t));
- size_t size = _stream->WriteInt16(val);
- _block += sizeof(int16_t);
- return size;
- }
- return 0;
+ WritePadding(sizeof(int16_t));
+ size_t size = _stream->WriteInt16(val);
+ _block += sizeof(int16_t);
+ return size;
}
size_t AlignedStream::WriteInt32(int32_t val) {
- if (_stream) {
- WritePadding(sizeof(int32_t));
- size_t size = _stream->WriteInt32(val);
- _block += sizeof(int32_t);
- return size;
- }
- return 0;
+ WritePadding(sizeof(int32_t));
+ size_t size = _stream->WriteInt32(val);
+ _block += sizeof(int32_t);
+ return size;
}
size_t AlignedStream::WriteInt64(int64_t val) {
- if (_stream) {
- WritePadding(sizeof(int64_t));
- size_t size = _stream->WriteInt64(val);
- _block += sizeof(int64_t);
- return size;
- }
- return 0;
+ WritePadding(sizeof(int64_t));
+ size_t size = _stream->WriteInt64(val);
+ _block += sizeof(int64_t);
+ return size;
}
size_t AlignedStream::WriteArray(const void *buffer, size_t elem_size, size_t count) {
- if (_stream) {
- WritePadding(elem_size);
- count = _stream->WriteArray(buffer, elem_size, count);
- _block += count * elem_size;
- return count;
- }
- return 0;
+ WritePadding(elem_size);
+ count = _stream->WriteArray(buffer, elem_size, count);
+ _block += count * elem_size;
+ return count;
}
size_t AlignedStream::WriteArrayOfInt16(const int16_t *buffer, size_t count) {
- if (_stream) {
- WritePadding(sizeof(int16_t));
- count = _stream->WriteArrayOfInt16(buffer, count);
- _block += count * sizeof(int16_t);
- return count;
- }
- return 0;
+ WritePadding(sizeof(int16_t));
+ count = _stream->WriteArrayOfInt16(buffer, count);
+ _block += count * sizeof(int16_t);
+ return count;
}
size_t AlignedStream::WriteArrayOfInt32(const int32_t *buffer, size_t count) {
- if (_stream) {
- WritePadding(sizeof(int32_t));
- count = _stream->WriteArrayOfInt32(buffer, count);
- _block += count * sizeof(int32_t);
- return count;
- }
- return 0;
+ WritePadding(sizeof(int32_t));
+ count = _stream->WriteArrayOfInt32(buffer, count);
+ _block += count * sizeof(int32_t);
+ return count;
}
size_t AlignedStream::WriteArrayOfInt64(const int64_t *buffer, size_t count) {
- if (_stream) {
- WritePadding(sizeof(int64_t));
- count = _stream->WriteArrayOfInt64(buffer, count);
- _block += count * sizeof(int64_t);
- return count;
- }
- return 0;
+ WritePadding(sizeof(int64_t));
+ count = _stream->WriteArrayOfInt64(buffer, count);
+ _block += count * sizeof(int64_t);
+ return count;
}
bool AlignedStream::Seek(soff_t offset, StreamSeek origin) {
@@ -255,10 +193,6 @@ bool AlignedStream::Seek(soff_t offset, StreamSeek origin) {
}
void AlignedStream::ReadPadding(size_t next_type) {
- if (!IsValid()) {
- return;
- }
-
if (next_type == 0) {
return;
}
@@ -285,10 +219,6 @@ void AlignedStream::ReadPadding(size_t next_type) {
}
void AlignedStream::WritePadding(size_t next_type) {
- if (!IsValid()) {
- return;
- }
-
if (next_type == 0) {
return;
}
@@ -312,10 +242,6 @@ void AlignedStream::WritePadding(size_t next_type) {
}
void AlignedStream::FinalizeBlock() {
- if (!IsValid()) {
- return;
- }
-
// Force the stream to read or write remaining padding to match the alignment
if (_mode == kAligned_Read) {
ReadPadding(_maxAlignment);
diff --git a/engines/ags/shared/util/data_stream.cpp b/engines/ags/shared/util/data_stream.cpp
index fbf52a3fbea..cbc417c4002 100644
--- a/engines/ags/shared/util/data_stream.cpp
+++ b/engines/ags/shared/util/data_stream.cpp
@@ -68,10 +68,6 @@ size_t DataStream::WriteInt64(int64_t val) {
}
size_t DataStream::ReadAndConvertArrayOfInt16(int16_t *buffer, size_t count) {
- if (!CanRead() || !buffer) {
- return 0;
- }
-
count = ReadArray(buffer, sizeof(int16_t), count);
for (size_t i = 0; i < count; ++i, ++buffer) {
*buffer = BBOp::SwapBytesInt16(*buffer);
@@ -80,10 +76,6 @@ size_t DataStream::ReadAndConvertArrayOfInt16(int16_t *buffer, size_t count) {
}
size_t DataStream::ReadAndConvertArrayOfInt32(int32_t *buffer, size_t count) {
- if (!CanRead() || !buffer) {
- return 0;
- }
-
count = ReadArray(buffer, sizeof(int32_t), count);
for (size_t i = 0; i < count; ++i, ++buffer) {
*buffer = BBOp::SwapBytesInt32(*buffer);
@@ -92,10 +84,6 @@ size_t DataStream::ReadAndConvertArrayOfInt32(int32_t *buffer, size_t count) {
}
size_t DataStream::ReadAndConvertArrayOfInt64(int64_t *buffer, size_t count) {
- if (!CanRead() || !buffer) {
- return 0;
- }
-
count = ReadArray(buffer, sizeof(int64_t), count);
for (size_t i = 0; i < count; ++i, ++buffer) {
*buffer = BBOp::SwapBytesInt64(*buffer);
@@ -104,10 +92,6 @@ size_t DataStream::ReadAndConvertArrayOfInt64(int64_t *buffer, size_t count) {
}
size_t DataStream::WriteAndConvertArrayOfInt16(const int16_t *buffer, size_t count) {
- if (!CanWrite() || !buffer) {
- return 0;
- }
-
size_t elem;
for (elem = 0; elem < count && !EOS(); ++elem, ++buffer) {
int16_t val = *buffer;
@@ -120,10 +104,6 @@ size_t DataStream::WriteAndConvertArrayOfInt16(const int16_t *buffer, size_t cou
}
size_t DataStream::WriteAndConvertArrayOfInt32(const int32_t *buffer, size_t count) {
- if (!CanWrite() || !buffer) {
- return 0;
- }
-
size_t elem;
for (elem = 0; elem < count && !EOS(); ++elem, ++buffer) {
int32_t val = *buffer;
@@ -136,10 +116,6 @@ size_t DataStream::WriteAndConvertArrayOfInt32(const int32_t *buffer, size_t cou
}
size_t DataStream::WriteAndConvertArrayOfInt64(const int64_t *buffer, size_t count) {
- if (!CanWrite() || !buffer) {
- return 0;
- }
-
size_t elem;
for (elem = 0; elem < count && !EOS(); ++elem, ++buffer) {
int64_t val = *buffer;
diff --git a/engines/ags/shared/util/file_stream.cpp b/engines/ags/shared/util/file_stream.cpp
index 9e595bdfbfd..d5b1262b45d 100644
--- a/engines/ags/shared/util/file_stream.cpp
+++ b/engines/ags/shared/util/file_stream.cpp
@@ -68,15 +68,11 @@ bool FileStream::EOS() const {
}
soff_t FileStream::GetLength() const {
- if (IsValid()) {
- soff_t pos = (soff_t)ags_ftell(_file);
- ags_fseek(_file, 0, SEEK_END);
- soff_t end = (soff_t)ags_ftell(_file);
- ags_fseek(_file, pos, SEEK_SET);
- return end;
- }
-
- return 0;
+ soff_t pos = (soff_t)ags_ftell(_file);
+ ags_fseek(_file, 0, SEEK_END);
+ soff_t end = (soff_t)ags_ftell(_file);
+ ags_fseek(_file, pos, SEEK_SET);
+ return end;
}
soff_t FileStream::GetPosition() const {
@@ -140,10 +136,6 @@ int32_t FileStream::WriteByte(uint8_t val) {
}
bool FileStream::Seek(soff_t offset, StreamSeek origin) {
- if (!_file) {
- return false;
- }
-
int stdclib_origin;
switch (origin) {
case kSeekBegin:
diff --git a/engines/ags/shared/util/memory_stream.cpp b/engines/ags/shared/util/memory_stream.cpp
index 2f34f65bfd7..59fa27720b4 100644
--- a/engines/ags/shared/util/memory_stream.cpp
+++ b/engines/ags/shared/util/memory_stream.cpp
@@ -120,9 +120,7 @@ bool MemoryStream::Seek(soff_t offset, StreamSeek origin) {
}
size_t MemoryStream::Write(const void *buffer, size_t size) {
- if (!_buf || _pos >= (soff_t)_buf_sz) {
- return 0;
- }
+ if (_pos >= (soff_t)_buf_sz) { return 0; }
size = std::min(size, _buf_sz - (size_t)_pos);
memcpy(_buf + _pos, buffer, size);
_pos += size;
@@ -131,9 +129,7 @@ size_t MemoryStream::Write(const void *buffer, size_t size) {
}
int32_t MemoryStream::WriteByte(uint8_t val) {
- if (!_buf || _pos >= (soff_t)_buf_sz) {
- return -1;
- }
+ if (_pos >= (soff_t)_buf_sz) { return -1; }
*(_buf + _pos) = val;
_pos++; _len++;
return val;
@@ -156,9 +152,6 @@ void VectorStream::Close() {
}
size_t VectorStream::Write(const void *buffer, size_t size) {
- if (!_vec) {
- return 0;
- }
_vec->resize(_vec->size() + size);
memcpy(_vec->data() + _pos, buffer, size);
_pos += size;
@@ -167,9 +160,6 @@ size_t VectorStream::Write(const void *buffer, size_t size) {
}
int32_t VectorStream::WriteByte(uint8_t val) {
- if (!_vec) {
- return -1;
- }
_vec->push_back(val);
_pos++; _len++;
return val;
diff --git a/engines/ags/shared/util/proxy_stream.cpp b/engines/ags/shared/util/proxy_stream.cpp
index d90c4ce1cba..a6339a8b16b 100644
--- a/engines/ags/shared/util/proxy_stream.cpp
+++ b/engines/ags/shared/util/proxy_stream.cpp
@@ -35,17 +35,14 @@ ProxyStream::~ProxyStream() {
}
void ProxyStream::Close() {
- if (_stream && _streamOwnershipPolicy == kDisposeAfterUse) {
+ if (_streamOwnershipPolicy == kDisposeAfterUse) {
delete _stream;
}
_stream = nullptr;
}
bool ProxyStream::Flush() {
- if (_stream) {
- return _stream->Flush();
- }
- return false;
+ return _stream->Flush();
}
bool ProxyStream::IsValid() const {
@@ -53,103 +50,103 @@ bool ProxyStream::IsValid() const {
}
bool ProxyStream::EOS() const {
- return _stream ? _stream->EOS() : true;
+ return _stream->EOS();
}
soff_t ProxyStream::GetLength() const {
- return _stream ? _stream->GetLength() : 0;
+ return _stream->GetLength();
}
soff_t ProxyStream::GetPosition() const {
- return _stream ? _stream->GetPosition() : -1;
+ return _stream->GetPosition();
}
bool ProxyStream::CanRead() const {
- return _stream ? _stream->CanRead() : false;
+ return _stream->CanRead();
}
bool ProxyStream::CanWrite() const {
- return _stream ? _stream->CanWrite() : false;
+ return _stream->CanWrite();
}
bool ProxyStream::CanSeek() const {
- return _stream ? _stream->CanSeek() : false;
+ return _stream->CanSeek();
}
size_t ProxyStream::Read(void *buffer, size_t size) {
- return _stream ? _stream->Read(buffer, size) : 0;
+ return _stream->Read(buffer, size);
}
int32_t ProxyStream::ReadByte() {
- return _stream ? _stream->ReadByte() : 0;
+ return _stream->ReadByte();
}
int16_t ProxyStream::ReadInt16() {
- return _stream ? _stream->ReadInt16() : 0;
+ return _stream->ReadInt16();
}
int32_t ProxyStream::ReadInt32() {
- return _stream ? _stream->ReadInt32() : 0;
+ return _stream->ReadInt32();
}
int64_t ProxyStream::ReadInt64() {
- return _stream ? _stream->ReadInt64() : 0;
+ return _stream->ReadInt64();
}
size_t ProxyStream::ReadArray(void *buffer, size_t elem_size, size_t count) {
- return _stream ? _stream->ReadArray(buffer, elem_size, count) : 0;
+ return _stream->ReadArray(buffer, elem_size, count);
}
size_t ProxyStream::ReadArrayOfInt16(int16_t *buffer, size_t count) {
- return _stream ? _stream->ReadArrayOfInt16(buffer, count) : 0;
+ return _stream->ReadArrayOfInt16(buffer, count);
}
size_t ProxyStream::ReadArrayOfInt32(int32_t *buffer, size_t count) {
- return _stream ? _stream->ReadArrayOfInt32(buffer, count) : 0;
+ return _stream->ReadArrayOfInt32(buffer, count);
}
size_t ProxyStream::ReadArrayOfInt64(int64_t *buffer, size_t count) {
- return _stream ? _stream->ReadArrayOfInt64(buffer, count) : 0;
+ return _stream->ReadArrayOfInt64(buffer, count);
}
size_t ProxyStream::Write(const void *buffer, size_t size) {
- return _stream ? _stream->Write(buffer, size) : 0;
+ return _stream->Write(buffer, size);
}
int32_t ProxyStream::WriteByte(uint8_t b) {
- return _stream ? _stream->WriteByte(b) : 0;
+ return _stream->WriteByte(b);
}
size_t ProxyStream::WriteInt16(int16_t val) {
- return _stream ? _stream->WriteInt16(val) : 0;
+ return _stream->WriteInt16(val);
}
size_t ProxyStream::WriteInt32(int32_t val) {
- return _stream ? _stream->WriteInt32(val) : 0;
+ return _stream->WriteInt32(val);
}
size_t ProxyStream::WriteInt64(int64_t val) {
- return _stream ? _stream->WriteInt64(val) : 0;
+ return _stream->WriteInt64(val);
}
size_t ProxyStream::WriteArray(const void *buffer, size_t elem_size, size_t count) {
- return _stream ? _stream->WriteArray(buffer, elem_size, count) : 0;
+ return _stream->WriteArray(buffer, elem_size, count);
}
size_t ProxyStream::WriteArrayOfInt16(const int16_t *buffer, size_t count) {
- return _stream ? _stream->WriteArrayOfInt16(buffer, count) : 0;
+ return _stream->WriteArrayOfInt16(buffer, count);
}
size_t ProxyStream::WriteArrayOfInt32(const int32_t *buffer, size_t count) {
- return _stream ? _stream->WriteArrayOfInt32(buffer, count) : 0;
+ return _stream->WriteArrayOfInt32(buffer, count);
}
size_t ProxyStream::WriteArrayOfInt64(const int64_t *buffer, size_t count) {
- return _stream ? _stream->WriteArrayOfInt64(buffer, count) : 0;
+ return _stream->WriteArrayOfInt64(buffer, count);
}
bool ProxyStream::Seek(soff_t offset, StreamSeek origin) {
- return _stream ? _stream->Seek(offset, origin) : false;
+ return _stream->Seek(offset, origin);
}
} // namespace Shared
diff --git a/engines/ags/shared/util/text_stream_reader.cpp b/engines/ags/shared/util/text_stream_reader.cpp
index 5d8b4e0dc69..4c383f41215 100644
--- a/engines/ags/shared/util/text_stream_reader.cpp
+++ b/engines/ags/shared/util/text_stream_reader.cpp
@@ -53,21 +53,15 @@ bool TextStreamReader::EOS() const {
}
char TextStreamReader::ReadChar() {
- if (_stream) {
- // Skip carriage-returns
- char c;
- do {
- c = _stream->ReadByte();
- } while (!_stream->EOS() && c == '\r');
- return c;
- }
- return '\0';
+ // Skip carriage-returns
+ char c;
+ do {
+ c = _stream->ReadByte();
+ } while (!_stream->EOS() && c == '\r');
+ return c;
}
String TextStreamReader::ReadString(size_t length) {
- if (!_stream) {
- return "";
- }
// TODO: remove carriage-return characters
return String::FromStreamCount(_stream, length);
}
@@ -77,10 +71,6 @@ String TextStreamReader::ReadLine() {
// Probably it is possible to group Stream::ReadString with this,
// both use similar algorythm, difference is only in terminator chars
- if (!_stream) {
- return "";
- }
-
String str;
int chars_read_last = 0;
int line_break_position = -1;
@@ -125,11 +115,8 @@ String TextStreamReader::ReadLine() {
}
String TextStreamReader::ReadAll() {
- if (_stream) {
- soff_t len = _stream->GetLength() - _stream->GetPosition();
- return ReadString(len > SIZE_MAX ? SIZE_MAX : (size_t)len);
- }
- return "";
+ soff_t len = _stream->GetLength() - _stream->GetPosition();
+ return ReadString(len > SIZE_MAX ? SIZE_MAX : (size_t)len);
}
} // namespace Shared
diff --git a/engines/ags/shared/util/text_stream_writer.cpp b/engines/ags/shared/util/text_stream_writer.cpp
index 531ac43eef1..b4c1ecc4eec 100644
--- a/engines/ags/shared/util/text_stream_writer.cpp
+++ b/engines/ags/shared/util/text_stream_writer.cpp
@@ -27,6 +27,7 @@ namespace AGS3 {
namespace AGS {
namespace Shared {
+// TODO: perhaps let configure line break character per TextWriter object?
#if AGS_PLATFORM_OS_WINDOWS
static const char Endl[2] = { '\r', '\n' };
#else
@@ -56,39 +57,24 @@ void TextStreamWriter::ReleaseStream() {
}
bool TextStreamWriter::EOS() const {
- return _stream ? _stream->EOS() : true;
+ return _stream->EOS();
}
void TextStreamWriter::WriteChar(char c) {
- if (_stream) {
- _stream->WriteByte(c);
- }
+ _stream->WriteByte(c);
}
void TextStreamWriter::WriteString(const String &str) {
- if (_stream) {
- // TODO: replace line-feed characters in string with platform-specific line break
- _stream->Write(str.GetCStr(), str.GetLength());
- }
+ _stream->Write(str.GetCStr(), str.GetLength());
}
void TextStreamWriter::WriteLine(const String &str) {
- if (!_stream) {
- return;
- }
-
- // TODO: replace line-feed characters in string with platform-specific line break
+ // TODO: perhaps let configure line break character?
_stream->Write(str.GetCStr(), str.GetLength());
_stream->Write(Endl, sizeof(Endl));
}
void TextStreamWriter::WriteFormat(const char *fmt, ...) {
- if (!_stream) {
- return;
- }
-
- // TODO: replace line-feed characters in format string with platform-specific line break
-
va_list argptr;
va_start(argptr, fmt);
int need_length = vsnprintf(nullptr, 0, fmt, argptr);
@@ -102,8 +88,7 @@ void TextStreamWriter::WriteFormat(const char *fmt, ...) {
}
void TextStreamWriter::WriteLineBreak() {
- if (_stream)
- _stream->Write(Endl, sizeof(Endl));
+ _stream->Write(Endl, sizeof(Endl));
}
} // namespace Shared
More information about the Scummvm-git-logs
mailing list