/*===========================================================================* * kmessages_dmp * *===========================================================================*/ PUBLIC void kmessages_dmp() { struct kmessages kmess; /* get copy of kernel messages */ char print_buf[_KMESS_BUF_SIZE+1]; /* this one is used to print */ int start; /* calculate start of messages */ int r; /* Try to get a copy of the kernel messages. */ if ((r = sys_getkmessages(&kmess)) != OK) { report("IS","warning: couldn't get copy of kmessages", r); return; } /* Try to print the kernel messages. First determine start and copy the * buffer into a print-buffer. This is done because the messages in the * copy may wrap (the kernel buffer is circular). */ start = ((kmess.km_next + _KMESS_BUF_SIZE) - kmess.km_size) % _KMESS_BUF_SIZE; r = 0; while (kmess.km_size > 0) { print_buf[r] = kmess.km_buf[(start+r) % _KMESS_BUF_SIZE]; r ++; kmess.km_size --; } print_buf[r] = 0; /* make sure it terminates */ printf("Dump of all messages generated by the kernel.\n\n"); printf("%s", print_buf); /* print the messages */ }
/*===========================================================================* * kmessages_dmp * *===========================================================================*/ void kmessages_dmp() { struct kmessages *kmess; /* get copy of kernel messages */ char *print_buf; /* this one is used to print */ int start; /* calculate start of messages */ int r; kmess = malloc(sizeof(struct kmessages)); if (!kmess) { report("IS","Error: no enough memory", -ENOMEM); return; } print_buf = malloc(KMESS_BUF_SIZE+1); if (!print_buf) { report("IS","Error: no enough memory", -ENOMEM); goto kmessages_dmp_free_buf1; } /* Try to get a copy of the kernel messages. */ if ((r = sys_getkmessages(kmess)) != 0) { report("IS","warning: couldn't get copy of kmessages", r); goto kmessages_dmp_free_buf2; } /* Try to print the kernel messages. First determine start and copy the * buffer into a print-buffer. This is done because the messages in the * copy may wrap (the kernel buffer is circular). */ start = ((kmess->km_next + KMESS_BUF_SIZE) - kmess->km_size) % KMESS_BUF_SIZE; r = 0; while (kmess->km_size > 0) { print_buf[r] = kmess->km_buf[(start+r) % KMESS_BUF_SIZE]; r ++; kmess->km_size --; } print_buf[r] = 0; /* make sure it terminates */ printk("Dump of all messages generated by the kernel.\n\n"); printk("%s", print_buf); /* print the messages */ kmessages_dmp_free_buf2: free(print_buf); kmessages_dmp_free_buf1: free(kmess); return; }