ppcrcd/trunk/yaboot/yaboot.c
sparky
cvs at pld-linux.org
Sun Mar 19 01:53:12 CET 2006
Author: sparky
Date: Sun Mar 19 01:53:10 2006
New Revision: 7221
Modified:
ppcrcd/trunk/yaboot/yaboot.c
Log:
- print at most 20 lines (1000 bytes may be too much)
Modified: ppcrcd/trunk/yaboot/yaboot.c
==============================================================================
--- ppcrcd/trunk/yaboot/yaboot.c (original)
+++ ppcrcd/trunk/yaboot/yaboot.c Sun Mar 19 01:53:10 2006
@@ -304,12 +304,11 @@
goto done;
}
- /* 2000 for not paged messages, 1000 for paged*/
- msg = malloc(2001 - paging * 1000);
+ msg = malloc(2001);
if (!msg)
goto done;
else
- memset(msg, 0, (2001 - paging * 1000));
+ memset(msg, 0, 2001);
result = open_file(&msgfile, &file);
if (result != FILE_ERR_OK) {
@@ -319,29 +318,36 @@
}
opened = 1;
- if ( file.fs->read(&file, (2000 - paging * 1000), msg) <= 0)
+ if ( file.fs->read(&file, 2000, msg) <= 0)
goto done;
- if ( paging && (*(msg + 999) != 0) ) {
- /* file longer than 1000 and paging is 1 */
- char *last_nl;
+ if ( paging ) {
+ char *nlp;
int len = 0;
+ int new_lines;
- while ( *(msg + 999) != 0 ) {
- last_nl = strrchr(msg, '\n');
- *last_nl = 0;
+ while ( *msg != '\0' ) {
+ new_lines = 20;
+ nlp = msg;
+ while (--new_lines > 0) {
+ nlp = strchr((nlp+1), '\n');
+ if ( nlp == NULL ) { /* less than 20 lines */
+ prom_printf("\r \r%s", msg);
+ goto done;
+ }
+ }
+ *++nlp = '\0';
- prom_printf("\r \r%s\n[Press a key]", msg);
- len += last_nl - msg + 1;
+ prom_printf("\r \r%s[Press a key]", msg);
+ len += nlp - msg;
- memset(msg, 0, 1001);
+ memset(msg, 0, 2001);
file.fs->seek(&file, len);
- file.fs->read(&file, 1000, msg);
+ file.fs->read(&file, 2000, msg);
/* wait until key */
while ( prom_nbgetchar() == -1 );
}
- prom_printf("\r \r%s", msg);
} else
prom_printf("%s", msg);
More information about the pld-cvs-commit
mailing list