Author: axeld Date: 2010-08-27 23:36:07 +0200 (Fri, 27 Aug 2010) New Revision: 38409 Changeset: http://dev.haiku-os.org/changeset/38409 Modified: haiku/trunk/src/add-ons/kernel/drivers/common/console.cpp haiku/trunk/src/system/kernel/debug/blue_screen.cpp Log: * Fixed CID 566 that was duplicated in blue_screen.cpp as well (but was not discovered by Coverity for some reason): commands without arguments would overwrite memory (in this case the sConsole::arg_count only, though). * Travis's copyright was missing in blue_screen.cpp. * Minor cleanup. Modified: haiku/trunk/src/add-ons/kernel/drivers/common/console.cpp =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/common/console.cpp 2010-08-27 21:10:14 UTC (rev 38408) +++ haiku/trunk/src/add-ons/kernel/drivers/common/console.cpp 2010-08-27 21:36:07 UTC (rev 38409) @@ -1,5 +1,5 @@ /* - * Copyright 2005, Axel Dörfler, axeld@xxxxxxxxxxxxxxxxx All rights reserved. + * Copyright 2005-2010, Axel Dörfler, axeld@xxxxxxxxxxxxxxxxx * Distributed under the terms of the MIT License. * * Copyright 2001-2002, Travis Geiselbrecht. All rights reserved. @@ -87,19 +87,19 @@ static void -gotoxy(struct console_desc *console, int new_x, int new_y) +gotoxy(struct console_desc *console, int newX, int newY) { - if (new_x >= console->columns) - new_x = console->columns - 1; - if (new_x < 0) - new_x = 0; - if (new_y >= console->lines) - new_y = console->lines - 1; - if (new_y < 0) - new_y = 0; + if (newX >= console->columns) + newX = console->columns - 1; + if (newX < 0) + newX = 0; + if (newY >= console->lines) + newY = console->lines - 1; + if (newY < 0) + newY = 0; - console->x = new_x; - console->y = new_y; + console->x = newX; + console->y = newY; } @@ -114,8 +114,8 @@ } -/** scroll from the cursor line up to the top of the scroll region up one line */ - +/*! Scroll from the cursor line up to the top of the scroll region up one line. +*/ static void scrup(struct console_desc *console) { @@ -130,12 +130,14 @@ } // clear the bottom line - console->module->fill_glyph(0, console->y, console->columns, 1, ' ', console->attr); + console->module->fill_glyph(0, console->y, console->columns, 1, ' ', + console->attr); } -/** scroll from the cursor line down to the bottom of the scroll region down one line */ - +/*! Scroll from the cursor line down to the bottom of the scroll region down + one line. +*/ static void scrdown(struct console_desc *console) { @@ -150,7 +152,8 @@ } // clear the top line - console->module->fill_glyph(0, console->y, console->columns, 1, ' ', console->attr); + console->module->fill_glyph(0, console->y, console->columns, 1, ' ', + console->attr); } @@ -211,10 +214,12 @@ { switch (mode) { case LINE_ERASE_WHOLE: - console->module->fill_glyph(0, console->y, console->columns, 1, ' ', console->attr); + console->module->fill_glyph(0, console->y, console->columns, 1, ' ', + console->attr); break; case LINE_ERASE_LEFT: - console->module->fill_glyph(0, console->y, console->x+1, 1, ' ', console->attr); + console->module->fill_glyph(0, console->y, console->x + 1, 1, ' ', + console->attr); break; case LINE_ERASE_RIGHT: console->module->fill_glyph(console->x, console->y, @@ -234,11 +239,12 @@ console->module->clear(console->attr); break; case SCREEN_ERASE_UP: - console->module->fill_glyph(0, 0, console->columns, console->y + 1, ' ', console->attr); + console->module->fill_glyph(0, 0, console->columns, console->y + 1, + ' ', console->attr); break; case SCREEN_ERASE_DOWN: - console->module->fill_glyph(console->y, 0, - console->columns, console->lines - console->y, ' ', console->attr); + console->module->fill_glyph(console->y, 0, console->columns, + console->lines - console->y, ' ', console->attr); break; default: return; @@ -247,21 +253,23 @@ static void -save_cur(struct console_desc *console, bool save_attrs) +save_cur(struct console_desc *console, bool saveAttrs) { console->saved_x = console->x; console->saved_y = console->y; - if (save_attrs) + + if (saveAttrs) console->saved_attr = console->attr; } static void -restore_cur(struct console_desc *console, bool restore_attrs) +restore_cur(struct console_desc *console, bool restoreAttrs) { console->x = console->saved_x; console->y = console->saved_y; - if (restore_attrs) + + if (restoreAttrs) console->attr = console->saved_attr; } @@ -273,7 +281,7 @@ cr(console); lf(console); } - console->module->put_glyph(console->x-1, console->y, c, console->attr); + console->module->put_glyph(console->x - 1, console->y, c, console->attr); return c; } @@ -336,7 +344,8 @@ break; case 7: // reverse console->reverse_attr = true; - console->attr = ((console->attr & BMASK) >> 4) | ((console->attr & FMASK) << 4); + console->attr = ((console->attr & BMASK) >> 4) + | ((console->attr & FMASK) << 4); if (console->bright_attr) console->attr |= 0x08; break; @@ -378,8 +387,9 @@ if (seenBracket) { switch(c) { - case 'H': /* set cursor position */ - case 'f': { + case 'H': // set cursor position + case 'f': + { int32 row = argCount > 0 ? args[0] : 1; int32 col = argCount > 1 ? args[1] : 1; if (row > 0) @@ -389,65 +399,73 @@ gotoxy(console, col, row); break; } - case 'A': { /* move up */ - int32 deltay = argCount > 0 ? -args[0] : -1; - if (deltay == 0) - deltay = -1; - gotoxy(console, console->x, console->y + deltay); + case 'A': // move up + { + int32 deltaY = argCount > 0 ? -args[0] : -1; + if (deltaY == 0) + deltaY = -1; + gotoxy(console, console->x, console->y + deltaY); break; } case 'e': - case 'B': { /* move down */ - int32 deltay = argCount > 0 ? args[0] : 1; - if (deltay == 0) - deltay = 1; - gotoxy(console, console->x, console->y + deltay); + case 'B': // move down + { + int32 deltaY = argCount > 0 ? args[0] : 1; + if (deltaY == 0) + deltaY = 1; + gotoxy(console, console->x, console->y + deltaY); break; } - case 'D': { /* move left */ - int32 deltax = argCount > 0 ? -args[0] : -1; - if (deltax == 0) - deltax = -1; - gotoxy(console, console->x + deltax, console->y); + case 'D': // move left + { + int32 deltaX = argCount > 0 ? -args[0] : -1; + if (deltaX == 0) + deltaX = -1; + gotoxy(console, console->x + deltaX, console->y); break; } case 'a': - case 'C': { /* move right */ - int32 deltax = argCount > 0 ? args[0] : 1; - if (deltax == 0) - deltax = 1; - gotoxy(console, console->x + deltax, console->y); + case 'C': // move right + { + int32 deltaX = argCount > 0 ? args[0] : 1; + if (deltaX == 0) + deltaX = 1; + gotoxy(console, console->x + deltaX, console->y); break; } case '`': - case 'G': { /* set X position */ - int32 newx = argCount > 0 ? args[0] : 1; - if (newx > 0) - newx--; - gotoxy(console, newx, console->y); + case 'G': // set X position + { + int32 newX = argCount > 0 ? args[0] : 1; + if (newX > 0) + newX--; + gotoxy(console, newX, console->y); break; } - case 'd': { /* set y position */ - int32 newy = argCount > 0 ? args[0] : 1; - if (newy > 0) - newy--; - gotoxy(console, console->x, newy); + case 'd': // set y position + { + int32 newY = argCount > 0 ? args[0] : 1; + if (newY > 0) + newY--; + gotoxy(console, console->x, newY); break; } - case 's': /* save current cursor */ + case 's': // save current cursor save_cur(console, false); break; - case 'u': /* restore cursor */ + case 'u': // restore cursor restore_cur(console, false); break; - case 'r': { /* set scroll region */ + case 'r': // set scroll region + { int32 low = argCount > 0 ? args[0] : 1; int32 high = argCount > 1 ? args[1] : console->lines; if (low <= high) set_scroll_region(console, low - 1, high - 1); break; } - case 'L': { /* scroll virtual down at cursor */ + case 'L': // scroll virtual down at cursor + { int32 lines = argCount > 0 ? args[0] : 1; while (lines > 0) { scrdown(console); @@ -455,7 +473,8 @@ } break; } - case 'M': { /* scroll virtual up at cursor */ + case 'M': // scroll virtual up at cursor + { int32 lines = argCount > 0 ? args[0] : 1; while (lines > 0) { scrup(console); @@ -519,13 +538,13 @@ static ssize_t -_console_write(struct console_desc *console, const void *buf, size_t len) +_console_write(struct console_desc *console, const void *buffer, size_t length) { const char *c; size_t pos = 0; - while (pos < len) { - c = &((const char *)buf)[pos++]; + while (pos < length) { + c = &((const char *)buffer)[pos++]; switch (console->state) { case CONSOLE_STATE_NORMAL: @@ -551,7 +570,7 @@ break; case 0x1b: // escape character - console->arg_count = -1; + console->arg_count = 0; console->state = CONSOLE_STATE_GOT_ESCAPE; break; default: @@ -559,15 +578,18 @@ } break; case CONSOLE_STATE_GOT_ESCAPE: - // look for either commands with no argument, or the '[' character + // Look for either commands with no argument, or the '[' + // character switch (*c) { case '[': console->state = CONSOLE_STATE_SEEN_BRACKET; break; default: - console->args[console->arg_count] = 0; - process_vt100_command(console, *c, false, console->args, console->arg_count + 1); + console->args[0] = 0; + process_vt100_command(console, *c, false, console->args, + 0); console->state = CONSOLE_STATE_NORMAL; + break; } break; case CONSOLE_STATE_SEEN_BRACKET: @@ -578,12 +600,16 @@ console->state = CONSOLE_STATE_PARSING_ARG; break; case '?': - // private DEC mode parameter follows - we ignore those anyway - // ToDo: check if it was really used in combination with a mode command + // Private DEC mode parameter follows - we ignore those + // anyway + // TODO: check if it was really used in combination with + // a mode command break; default: - process_vt100_command(console, *c, true, console->args, console->arg_count + 1); + process_vt100_command(console, *c, true, console->args, + console->arg_count + 1); console->state = CONSOLE_STATE_NORMAL; + break; } break; case CONSOLE_STATE_NEW_ARG: @@ -598,8 +624,10 @@ console->state = CONSOLE_STATE_PARSING_ARG; break; default: - process_vt100_command(console, *c, true, console->args, console->arg_count + 1); + process_vt100_command(console, *c, true, console->args, + console->arg_count + 1); console->state = CONSOLE_STATE_NORMAL; + break; } break; case CONSOLE_STATE_PARSING_ARG: @@ -613,8 +641,10 @@ console->state = CONSOLE_STATE_NEW_ARG; break; default: - process_vt100_command(console, *c, true, console->args, console->arg_count + 1); + process_vt100_command(console, *c, true, console->args, + console->arg_count + 1); console->state = CONSOLE_STATE_NORMAL; + break; } } } @@ -767,7 +797,7 @@ publish_devices(void) { static const char *devices[] = { - DEVICE_NAME, + DEVICE_NAME, NULL }; Modified: haiku/trunk/src/system/kernel/debug/blue_screen.cpp =================================================================== --- haiku/trunk/src/system/kernel/debug/blue_screen.cpp 2010-08-27 21:10:14 UTC (rev 38408) +++ haiku/trunk/src/system/kernel/debug/blue_screen.cpp 2010-08-27 21:36:07 UTC (rev 38409) @@ -1,6 +1,9 @@ /* - * Copyright 2005-2008, Axel Dörfler, axeld@xxxxxxxxxxxxxxxxx All rights reserved. + * Copyright 2005-2010, Axel Dörfler, axeld@xxxxxxxxxxxxxxxxx * Distributed under the terms of the MIT License. + * + * Copyright 2001-2002, Travis Geiselbrecht. All rights reserved. + * Distributed under the terms of the NewOS License. */ @@ -298,7 +301,8 @@ static bool -process_vt100_command(const char c, bool seenBracket, int32 *args, int32 argCount) +process_vt100_command(const char c, bool seenBracket, int32 *args, + int32 argCount) { bool ret = true; @@ -307,8 +311,9 @@ if (seenBracket) { switch (c) { - case 'H': /* set cursor position */ - case 'f': { + case 'H': // set cursor position + case 'f': + { int32 row = argCount > 0 ? args[0] : 1; int32 col = argCount > 1 ? args[1] : 1; if (row > 0) @@ -318,66 +323,74 @@ move_cursor(col, row); break; } - case 'A': { /* move up */ - int32 deltay = argCount > 0 ? -args[0] : -1; - if (deltay == 0) - deltay = -1; - move_cursor(sScreen.x, sScreen.y + deltay); + case 'A': // move up + { + int32 deltaY = argCount > 0 ? -args[0] : -1; + if (deltaY == 0) + deltaY = -1; + move_cursor(sScreen.x, sScreen.y + deltaY); break; } case 'e': - case 'B': { /* move down */ - int32 deltay = argCount > 0 ? args[0] : 1; - if (deltay == 0) - deltay = 1; - move_cursor(sScreen.x, sScreen.y + deltay); + case 'B': // move down + { + int32 deltaY = argCount > 0 ? args[0] : 1; + if (deltaY == 0) + deltaY = 1; + move_cursor(sScreen.x, sScreen.y + deltaY); break; } - case 'D': { /* move left */ - int32 deltax = argCount > 0 ? -args[0] : -1; - if (deltax == 0) - deltax = -1; - move_cursor(sScreen.x + deltax, sScreen.y); + case 'D': // move left + { + int32 deltaX = argCount > 0 ? -args[0] : -1; + if (deltaX == 0) + deltaX = -1; + move_cursor(sScreen.x + deltaX, sScreen.y); break; } case 'a': - case 'C': { /* move right */ - int32 deltax = argCount > 0 ? args[0] : 1; - if (deltax == 0) - deltax = 1; - move_cursor(sScreen.x + deltax, sScreen.y); + case 'C': // move right + { + int32 deltaX = argCount > 0 ? args[0] : 1; + if (deltaX == 0) + deltaX = 1; + move_cursor(sScreen.x + deltaX, sScreen.y); break; } case '`': - case 'G': { /* set X position */ - int32 newx = argCount > 0 ? args[0] : 1; - if (newx > 0) - newx--; - move_cursor(newx, sScreen.y); + case 'G': // set X position + { + int32 newX = argCount > 0 ? args[0] : 1; + if (newX > 0) + newX--; + move_cursor(newX, sScreen.y); break; } - case 'd': { /* set y position */ - int32 newy = argCount > 0 ? args[0] : 1; - if (newy > 0) - newy--; - move_cursor(sScreen.x, newy); + case 'd': // set y position + { + int32 newY = argCount > 0 ? args[0] : 1; + if (newY > 0) + newY--; + move_cursor(sScreen.x, newY); break; } #if 0 - case 's': /* save current cursor */ + case 's': // save current cursor save_cur(console, false); break; - case 'u': /* restore cursor */ + case 'u': // restore cursor restore_cur(console, false); break; - case 'r': { /* set scroll region */ + case 'r': // set scroll region + { int32 low = argCount > 0 ? args[0] : 1; int32 high = argCount > 1 ? args[1] : sScreen.lines; if (low <= high) set_scroll_region(console, low - 1, high - 1); break; } - case 'L': { /* scroll virtual down at cursor */ + case 'L': // scroll virtual down at cursor + { int32 lines = argCount > 0 ? args[0] : 1; while (lines > 0) { scrdown(console); @@ -385,7 +398,8 @@ } break; } - case 'M': { /* scroll virtual up at cursor */ + case 'M': // scroll virtual up at cursor + { int32 lines = argCount > 0 ? args[0] : 1; while (lines > 0) { scrup(console); @@ -467,7 +481,7 @@ back_space(); break; case '\t': - // ToDo: real tab... + // TODO: real tab... sScreen.x = (sScreen.x + 8) & ~7; if (sScreen.x >= sScreen.columns) next_line(); @@ -480,7 +494,7 @@ case 0x1b: // escape character - sScreen.arg_count = -1; + sScreen.arg_count = 0; sScreen.state = CONSOLE_STATE_GOT_ESCAPE; break; default: @@ -494,9 +508,8 @@ sScreen.state = CONSOLE_STATE_SEEN_BRACKET; break; default: - sScreen.args[sScreen.arg_count] = 0; - process_vt100_command(c, false, sScreen.args, - sScreen.arg_count + 1); + sScreen.args[0] = 0; + process_vt100_command(c, false, sScreen.args, 0); sScreen.state = CONSOLE_STATE_NORMAL; } break; @@ -504,7 +517,7 @@ switch (c) { case '0'...'9': sScreen.arg_count = 0; - sScreen.args[sScreen.arg_count] = c - '0'; + sScreen.args[0] = c - '0'; sScreen.state = CONSOLE_STATE_PARSING_ARG; break; case '?': @@ -515,13 +528,13 @@ process_vt100_command(c, true, sScreen.args, sScreen.arg_count + 1); sScreen.state = CONSOLE_STATE_NORMAL; + break; } break; case CONSOLE_STATE_NEW_ARG: switch (c) { case '0'...'9': - sScreen.arg_count++; - if (sScreen.arg_count == MAX_ARGS) { + if (++sScreen.arg_count == MAX_ARGS) { sScreen.state = CONSOLE_STATE_NORMAL; break; } @@ -532,6 +545,7 @@ process_vt100_command(c, true, sScreen.args, sScreen.arg_count + 1); sScreen.state = CONSOLE_STATE_NORMAL; + break; } break; case CONSOLE_STATE_PARSING_ARG: @@ -548,6 +562,7 @@ process_vt100_command(c, true, sScreen.args, sScreen.arg_count + 1); sScreen.state = CONSOLE_STATE_NORMAL; + break; } } }