Auch wenn das nicht gerade LowLevel Code ist, habe ich hier ein kleines Problem mit meinem printf () Code. Ich finde einfach den Fehler nicht, warscheinlich sehe ich einfach den Wald vor lauter Bäumen nicht.
Hier ist mein relevanter Code:
// stdarg.h
typedef char *va_list;
#define va_start(AP, LASTARG) (AP = ((char *) &(LASTARG)))
#define va_end(AP)
#define va_arg(AP, TYPE) (AP += 4, *((TYPE *) (AP)))
//debug.c
void kernelFormatString (char *fmt, va_list args)
{
char buffer[1024];
char *ptr = buffer;
while (*fmt != 0)
{
if (*fmt == '%')
{
fmt++;
if (*fmt == 's') {
char *string = va_arg (args, char *);
while (*string != 0) {
*ptr++ = *string++;
}
}
}else{
*ptr++ = *fmt;
}
fmt++;
}
*ptr = 0;
// debugOut gibt den string aus, debugOut funktioniert aber richtig
debugOut (buffer);
}
void kernelPrint (char *fmt, ...)
{
va_list args;
va_start (args, fmt);
kernelFormatString (fmt, args);
va_end (args);
}
void debugInfo (char *system, char *fmt, ...)
{
va_list args;
va_start (args, fmt);
kernelPrint ("(%s)", system);
kernelFormatString (fmt, args);
va_end (args);
}
Falls ich nun die Funktion so aufrufe:
debugInfo ("kernel", "ein string\n");
erhalte ich eine solche ausgabe:
"(<einige sonderzeichen>) ein string\n"
eigentlich sollte ich aber
"(kernel) ein string\n"
erhalten.
Die Sonderzeichen entstehen warscheinlich daraus, das irgentein Pointer auf eine falsche Stelle zeigt.