Skip to content

Commit 0f35f8d

Browse files
committed
Fix app window buf allocation #64
1 parent b36d698 commit 0f35f8d

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

src/ps2_mouse.cc

+15
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,21 @@ void MouseManager() {
175175
SheetPainter::DrawString(*debug_info_sheet, "mouse:", 8, 16, false);
176176
debug_info_sheet->Flush();
177177

178+
Sheet* debug_info_sheet2 = AllocKernelMemory<Sheet*>(sizeof(Sheet));
179+
bzero(debug_info_sheet2, sizeof(Sheet));
180+
uint32_t* debug_info_buf2 =
181+
AllocKernelMemory<uint32_t*>(4 * debug_info_width * debug_info_height);
182+
for (int y = 0; y < debug_info_height; y++) {
183+
for (int x = 0; x < debug_info_width; x++) {
184+
debug_info_buf2[y * debug_info_width + x] = 0xffffff;
185+
}
186+
}
187+
debug_info_sheet2->Init(debug_info_buf2, debug_info_width, debug_info_height,
188+
debug_info_width, 0, 0);
189+
debug_info_sheet2->SetParent(liumos->vram_sheet);
190+
SheetPainter::DrawString(*debug_info_sheet2, "sheet2", 8, 16, false);
191+
debug_info_sheet2->Flush();
192+
178193
bool last_left_button_state = false;
179194
Sheet* focused = nullptr;
180195
int focused_ofs_x = 0, focused_ofs_y = 0;

src/syscall.cc

+11-2
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ typedef uint32_t socklen_t;
4747

4848
struct PerProcessSyscallData {
4949
Sheet* window_sheet;
50+
uint32_t* window_buf;
5051
int num_getdents64_called;
5152
// for opening normal file: fd = 6
5253
int idx_in_root_files;
@@ -556,20 +557,28 @@ __attribute__((ms_abi)) extern "C" void SyscallHandler(uint64_t* args) {
556557
return;
557558
}
558559
ysize = -ysize;
560+
if (ysize > 2048 || xsize > 2048) {
561+
kprintf("msync: create window: window too large: %dx%d\n", xsize, ysize);
562+
args[0] = static_cast<uint64_t>(-1);
563+
return;
564+
}
559565
auto pid = liumos->scheduler->GetCurrentProcess().GetID();
560566
auto& ppdata = per_process_syscall_data[pid];
561567
auto& sheet = ppdata.window_sheet;
568+
auto& buf = ppdata.window_buf;
562569
if (!sheet) {
563570
kprintf("offset_to_data = %d, xsize = %d, ysize = %d\n", offset_to_data,
564571
xsize, ysize);
565572
// TODO(hikalium): allocate this backing sheet on fopen.
566573
sheet = AllocKernelMemory<Sheet*>(sizeof(Sheet));
574+
buf = AllocKernelMemory<uint32_t*>(xsize * ysize * 4);
567575
bzero(sheet, sizeof(Sheet));
568-
sheet->Init(reinterpret_cast<uint32_t*>(addr + offset_to_data), xsize,
569-
ysize, xsize, 0, 0);
576+
sheet->Init(buf, xsize, ysize, xsize, 0, 0);
570577
kprintf("vram_sheet is at %p\n", liumos->vram_sheet);
571578
sheet->SetParent(liumos->vram_sheet);
572579
}
580+
memcpy(buf, reinterpret_cast<uint32_t*>(addr + offset_to_data),
581+
xsize * ysize * 4);
573582
sheet->Flush(0, 0, xsize, ysize);
574583
args[0] = 0;
575584
return;

0 commit comments

Comments
 (0)