Exemple #1
0
/*===========================================================================*
 *				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 */
}
Exemple #2
0
/*===========================================================================*
 *				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;
}