aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Fleming <matt.fleming@intel.com>2011-11-25 15:54:48 +0000
committerMatt Fleming <matt.fleming@intel.com>2011-12-02 12:13:30 +0000
commit086d698c642f0b8901757a40cef56b04d05bf19c (patch)
tree1dfb9e228c0ce1febe7d08e35cef26bb8c1b71a6
parent9273fdfbac8bdb76d66ba2b2dbfbd860ad0434b3 (diff)
downloadsyslinux-086d698c642f0b8901757a40cef56b04d05bf19c.tar.gz
syslinux-086d698c642f0b8901757a40cef56b04d05bf19c.tar.xz
syslinux-086d698c642f0b8901757a40cef56b04d05bf19c.zip
ldlinux: Add eprintf() to print to VGA and serial
printf() is used heavily in the ldlinux code but that only displays things on the VGA console, not on serial. Introduce eprintf(), which gives us the benefit of format strings but will also print to both VGA and serial. Signed-off-by: Matt Fleming <matt.fleming@intel.com>
-rw-r--r--com32/elflink/ldlinux/Makefile2
-rw-r--r--com32/elflink/ldlinux/cli.c30
-rw-r--r--com32/elflink/ldlinux/config.h2
-rw-r--r--com32/elflink/ldlinux/eprintf.c35
-rw-r--r--com32/elflink/ldlinux/readconfig.c14
5 files changed, 60 insertions, 23 deletions
diff --git a/com32/elflink/ldlinux/Makefile b/com32/elflink/ldlinux/Makefile
index 32780c49..5927e500 100644
--- a/com32/elflink/ldlinux/Makefile
+++ b/com32/elflink/ldlinux/Makefile
@@ -20,7 +20,7 @@ all: ldlinux.c32 ldlinux_lnx.a
ldlinux.c32 : ldlinux.o cli.o readconfig.o refstr.o colors.o getadv.o \
adv.o ipappend.o execute.o kernel.o get_key.o \
- advwrite.o setadv.o
+ advwrite.o setadv.o eprintf.o
$(LD) $(LDFLAGS) -o $@ $^
LNXLIBOBJS = get_key.lo
diff --git a/com32/elflink/ldlinux/cli.c b/com32/elflink/ldlinux/cli.c
index 3bb7db4d..1ed3ea63 100644
--- a/com32/elflink/ldlinux/cli.c
+++ b/com32/elflink/ldlinux/cli.c
@@ -81,7 +81,7 @@ static const char * cmd_reverse_search(int *cursor)
memset(buf, 0, MAX_CMDLINE_LEN);
- printf("\033[1G\033[1;36m(reverse-i-search)`': \033[0m");
+ eprintf("\033[1G\033[1;36m(reverse-i-search)`': \033[0m");
while (1) {
key = mygetkey(0);
@@ -115,11 +115,11 @@ static const char * cmd_reverse_search(int *cursor)
*cursor = p - last_good->command;
}
- printf("\033[?7l\033[?25l");
+ eprintf("\033[?7l\033[?25l");
/* Didn't handle the line wrap case here */
- printf("\033[1G\033[1;36m(reverse-i-search)\033[0m`%s': %s",
+ eprintf("\033[1G\033[1;36m(reverse-i-search)\033[0m`%s': %s",
buf, last_good->command ? : "");
- printf("\033[K\r");
+ eprintf("\033[K\r");
}
return last_good ? last_good->command : NULL;
@@ -171,10 +171,10 @@ const char *edit_cmdline(const char *input, int top /*, int width */ ,
prev_len = max(len, prev_len);
/* Redraw the command line */
- printf("\033[?7l\033[?25l");
+ eprintf("\033[?7l\033[?25l");
if (y)
- printf("\033[%dA", y);
- printf("\033[1G\033[1;36m%s \033[0m", input);
+ eprintf("\033[%dA", y);
+ eprintf("\033[1G\033[1;36m%s \033[0m", input);
x = strlen(input);
y = 0;
@@ -184,23 +184,23 @@ const char *edit_cmdline(const char *input, int top /*, int width */ ,
at++;
x++;
if (x >= width) {
- printf("\r\n");
+ eprintf("\r\n");
x = 0;
y++;
}
}
- printf("\033[K\r");
+ eprintf("\033[K\r");
dy = y - (cursor + strlen(input) + 1) / width;
x = (cursor + strlen(input) + 1) % width;
if (dy) {
- printf("\033[%dA", dy);
+ eprintf("\033[%dA", dy);
y -= dy;
}
if (x)
- printf("\033[%dC", x);
- printf("\033[?25h");
+ eprintf("\033[%dC", x);
+ eprintf("\033[?25h");
prev_len = len;
redraw = 0;
}
@@ -294,7 +294,7 @@ const char *edit_cmdline(const char *input, int top /*, int width */ ,
cursor++;
x++;
if (x >= width) {
- printf("\r\n");
+ eprintf("\r\n");
y++;
x = 0;
}
@@ -423,7 +423,7 @@ const char *edit_cmdline(const char *input, int top /*, int width */ ,
cursor++;
x++;
if (x >= width) {
- printf("\r\n\033[K");
+ eprintf("\r\n\033[K");
y++;
x = 0;
}
@@ -443,7 +443,7 @@ const char *edit_cmdline(const char *input, int top /*, int width */ ,
}
}
- printf("\033[?7h");
+ eprintf("\033[?7h");
/* Add the command to the history */
comm_counter = malloc(sizeof(struct cli_command));
diff --git a/com32/elflink/ldlinux/config.h b/com32/elflink/ldlinux/config.h
index 8f708f14..c34b2cc6 100644
--- a/com32/elflink/ldlinux/config.h
+++ b/com32/elflink/ldlinux/config.h
@@ -38,4 +38,6 @@ extern const char *onerror; //"onerror" command line
extern void cat_help_file(int key);
+extern void eprintf(const char *filename, ...);
+
#endif /* __CONFIG_H__ */
diff --git a/com32/elflink/ldlinux/eprintf.c b/com32/elflink/ldlinux/eprintf.c
new file mode 100644
index 00000000..d8858ff9
--- /dev/null
+++ b/com32/elflink/ldlinux/eprintf.c
@@ -0,0 +1,35 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+
+#define BUFFER_SIZE 4096
+
+static void veprintf(const char *format, va_list ap)
+{
+ int rv, _rv;
+ char buffer[BUFFER_SIZE];
+ char *p;
+
+ _rv = rv = vsnprintf(buffer, BUFFER_SIZE, format, ap);
+
+ if (rv < 0)
+ return;
+
+ if (rv > BUFFER_SIZE - 1)
+ rv = BUFFER_SIZE - 1;
+
+ p = buffer;
+ while (rv--)
+ write_serial(*p++);
+
+ _fwrite(buffer, _rv, stdout);
+}
+
+void eprintf(const char *format, ...)
+{
+ va_list ap;
+
+ va_start(ap, format);
+ veprintf(format, ap);
+ va_end(ap);
+}
diff --git a/com32/elflink/ldlinux/readconfig.c b/com32/elflink/ldlinux/readconfig.c
index 3a6a3677..564cbeff 100644
--- a/com32/elflink/ldlinux/readconfig.c
+++ b/com32/elflink/ldlinux/readconfig.c
@@ -423,12 +423,12 @@ void print_labels(const char *prefix, size_t len)
{
struct menu_entry *me;
- printf("\n");
+ eprintf("\n");
for (me = all_entries; me; me = me->next ) {
if (!strncmp(prefix, me->label, len))
- printf(" %s", me->label);
+ eprintf(" %s", me->label);
}
- printf("\n");
+ eprintf("\n");
}
struct menu_entry *find_label(const char *str)
@@ -628,7 +628,7 @@ static int cat_file(const char *filename)
return -1;
while (fgets(line, sizeof(line), f) != NULL)
- printf("%s", line);
+ eprintf("%s", line);
fclose(f);
return 0;
@@ -685,7 +685,7 @@ void cat_help_file(int key)
return;
if (cm->fkeyhelp[fkey].textname) {
- printf("\n");
+ eprintf("\n");
cat_file(cm->fkeyhelp[fkey].textname);
}
}
@@ -1306,7 +1306,7 @@ do_include:
write_serial_str(copyright_str);
}
} else if (looking_at(p, "say")) {
- printf("%s\n", p + 4);
+ eprintf("%s\n", p+4);
} else if (looking_at(p, "path")) {
/* PATH-based lookup */
char *new_path, *_p;
@@ -1323,7 +1323,7 @@ do_include:
_p[len + new_len] = '\0';
PATH = _p;
} else
- printf("Failed to realloc PATH\n");
+ eprintf("Failed to realloc PATH\n");
}
}
}