aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Smith <alex@alex-smith.me.uk>2012-07-31 10:12:33 +0100
committerAlex Smith <alex@alex-smith.me.uk>2012-07-31 12:08:45 +0100
commitcaa1e8b74245bd1602bd9d6ae642e34beb583a00 (patch)
tree9f76687a65e0bab66d10ee606636d9ac55bc49f7
parent8ffd0477dd4998324e051800da35cadd91a7fb8c (diff)
Fix CID 712419, 712420, 712421, 712422: Unintentional sign extension to 64 bits.hrev44443
-rw-r--r--src/add-ons/kernel/file_systems/bfs/BlockAllocator.cpp5
-rw-r--r--src/add-ons/kernel/file_systems/bfs/Inode.cpp5
-rw-r--r--src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp3
3 files changed, 8 insertions, 5 deletions
diff --git a/src/add-ons/kernel/file_systems/bfs/BlockAllocator.cpp b/src/add-ons/kernel/file_systems/bfs/BlockAllocator.cpp
index b0d446f75b..0540354b24 100644
--- a/src/add-ons/kernel/file_systems/bfs/BlockAllocator.cpp
+++ b/src/add-ons/kernel/file_systems/bfs/BlockAllocator.cpp
@@ -1990,8 +1990,9 @@ BlockAllocator::_CheckInodeBlocks(Inode* inode, const char* name)
if (status != B_OK)
return status;
- int32 maxIndex = (indirect.Length() << fVolume->BlockShift())
- / sizeof(block_run);
+ int32 maxIndex =
+ ((uint32)indirect.Length() << fVolume->BlockShift())
+ / sizeof(block_run);
for (int32 index = 0; index < maxIndex; ) {
block_run* runs = (block_run*)cachedDirect.SetTo(
diff --git a/src/add-ons/kernel/file_systems/bfs/Inode.cpp b/src/add-ons/kernel/file_systems/bfs/Inode.cpp
index 8e0c0f0dac..8abf77c3e9 100644
--- a/src/add-ons/kernel/file_systems/bfs/Inode.cpp
+++ b/src/add-ons/kernel/file_systems/bfs/Inode.cpp
@@ -1517,7 +1517,8 @@ Inode::FindBlockRun(off_t pos, block_run& run, off_t& offset)
<< fVolume->BlockShift();
if (runBlockEnd > pos) {
run = data->direct[current];
- offset = runBlockEnd - (run.Length() << fVolume->BlockShift());
+ offset = runBlockEnd
+ - ((uint32)run.Length() << fVolume->BlockShift());
return fVolume->ValidateBlockRun(run);
}
}
@@ -1878,7 +1879,7 @@ Inode::_GrowStream(Transaction& transaction, off_t size)
data->max_indirect_range = HOST_ENDIAN_TO_BFS_INT64(
data->MaxIndirectRange()
- + (run.Length() << fVolume->BlockShift()));
+ + ((uint32)run.Length() << fVolume->BlockShift()));
data->size = HOST_ENDIAN_TO_BFS_INT64(blocksNeeded > 0
? data->MaxIndirectRange() : size);
continue;
diff --git a/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp b/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp
index fff1563cc1..ad9b88774d 100644
--- a/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp
+++ b/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp
@@ -527,7 +527,8 @@ bfs_get_file_map(fs_volume* _volume, fs_vnode* _node, off_t offset, size_t size,
return status;
vecs[index].offset = volume->ToOffset(run) + offset - fileOffset;
- vecs[index].length = (run.Length() << blockShift) - offset + fileOffset;
+ vecs[index].length = ((uint32)run.Length() << blockShift)
+ - offset + fileOffset;
// are we already done?
if ((uint64)size <= (uint64)vecs[index].length