[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