Beispiel #1
0
static void tipc_printbuf_move(struct print_buf *pb_to,
			       struct print_buf *pb_from)
{
	int len;

	/* Handle the cases where contents can't be moved */

	if (!pb_to->buf)
		return;

	if (!pb_from->buf) {
		tipc_printbuf_reset(pb_to);
		return;
	}

	if (pb_to->size < pb_from->size) {
		strcpy(pb_to->buf, "*** PRINT BUFFER MOVE ERROR ***");
		pb_to->buf[pb_to->size - 1] = ~0;
		pb_to->crs = strchr(pb_to->buf, 0);
		return;
	}

	/* Copy data from char after cursor to end (if used) */

	len = pb_from->buf + pb_from->size - pb_from->crs - 2;
	if ((pb_from->buf[pb_from->size - 1] == 0) && (len > 0)) {
		strcpy(pb_to->buf, pb_from->crs + 1);
		pb_to->crs = pb_to->buf + len;
	} else
		pb_to->crs = pb_to->buf;

	/* Copy data from start to cursor (always) */

	len = pb_from->crs - pb_from->buf;
	strcpy(pb_to->crs, pb_from->buf);
	pb_to->crs += len;

	tipc_printbuf_reset(pb_from);
}
Beispiel #2
0
void tipc_dump_dbg(struct print_buf *pb, const char *fmt, ...)
{
    int len;

    if (pb == TIPC_CONS)
        return;

    spin_lock_bh(&print_lock);

    FORMAT(print_string, len, fmt);
    printk(print_string);

    printk("\n---- Start of %s log dump ----\n\n",
           (pb == TIPC_LOG) ? "global" : "local");
    printbuf_dump(pb);
    tipc_printbuf_reset(pb);
    printk("\n---- End of dump ----\n");

    spin_unlock_bh(&print_lock);
}
Beispiel #3
0
void tipc_dump(struct print_buf *pb, const char *fmt, ...)
{
	struct print_buf *pb_next;
	int len;

	spin_lock_bh(&print_lock);
	FORMAT(print_string, len, fmt);
	printk(print_string);

	for (; pb; pb = pb->next) {
		if (pb != TIPC_CONS) {
			printk("\n---- Start of %s log dump ----\n\n",
			       (pb == TIPC_LOG) ? "global" : "local");
			printbuf_dump(pb);
			tipc_printbuf_reset(pb);
			printk("\n---- End of dump ----\n");
		}
		pb_next = pb->next;
		pb->next = NULL;
		pb = pb_next;
	}
	spin_unlock_bh(&print_lock);
}
Beispiel #4
0
int tipc_printbuf_validate(struct print_buf *pb)
{
    char *err = "\n\n*** PRINT BUFFER OVERFLOW ***\n\n";
    char *cp_buf;
    struct print_buf cb;

    if (!pb->buf)
        return 0;

    if (pb->buf[pb->size - 1] == 0) {
        cp_buf = kmalloc(pb->size, GFP_ATOMIC);
        if (cp_buf) {
            tipc_printbuf_init(&cb, cp_buf, pb->size);
            tipc_printbuf_move(&cb, pb);
            tipc_printbuf_move(pb, &cb);
            kfree(cp_buf);
            memcpy(pb->buf, err, strlen(err));
        } else {
            tipc_printbuf_reset(pb);
            tipc_printf(pb, err);
        }
    }
    return (pb->crs - pb->buf + 1);
}