Пример #1
0
int fs_memcmp(void *s, void *d, size_t len)
{
    register unsigned char *p1 = s;
    register unsigned char *p2 = d;
    int c = 0;

    while (len-- && !c)
        c = get_user_char((void *)(p1++)) - *p2++;

    return c;
}
Пример #2
0
int tty_write(struct inode *inode, struct file *file, char *data, int len)
{
    register struct tty *tty = determine_tty(inode->i_rdev);
    register char *pi;
#if 0
    int blocking = (file->f_flags & O_NONBLOCK) ? 0 : 1;
#endif

    pi = (char *)len;
    while ((int)(pi--)) {
	tty_charout(tty,
	    get_user_char((void *)(data++))
	   /* , blocking */ );
    }
    return len;
}
Пример #3
0
Файл: lp.c Проект: lithoxs/elks
static size_t lp_write(struct inode *inode, struct file *file, char *buf, int count)
{
    register char *chrsp;

#if 0

    /* initialize printer */
    lp_reset(MINOR(inode->i_rdev));

#endif

    chrsp = 0;
    while (((int)chrsp) < count) {
	if (!lp_char_polled((int)get_user_char((void *)(buf++)),
			    MINOR(inode->i_rdev)))
	    break;
	chrsp++;
    }
    return (size_t)chrsp;
}
Пример #4
0
void print_syscall(register struct syscall_params *p, int retval)
{
    int tmpa, tent = 0;
    unsigned char i, tmpb;

    /* Scan elks_syscalls for the system call info */

    while ((elks_table[tent].s_num != 0) &&
	   (elks_table[tent].s_num != p->s_num))
	tent++;

    if (!elks_table[tent].s_num)
	printk("Syscall not recognised: %u\n", p->s_num);
    else {

#ifdef STRACE_PRINTSTACK

	printk("[%d/%p: %d %s(", current->pid, current->t_regs.sp, p->s_num,
	       elks_table[tent].s_name);

#else

	printk("[%d: %s(", current->pid, elks_table[tent].s_name);

#endif

	for (i = 0; i < elks_table[tent].s_params; i++) {

	    if (i)
		printk(", ");

	    switch (elks_table[tent].t_param[i]) {

	    case P_DATA:
		printk("&0x%X", p->s_param[i]);

	    case P_NONE:
		break;

	    case P_POINTER:
	    case P_PDATA:
		printk("0x%X", p->s_param[i]);
		break;

	    case P_UCHAR:
	    case P_SCHAR:
		printk("'%c'", p->s_param[i]);
		break;

	    case P_STR:
		con_charout('\"');
		tmpa = p->s_param[i];
		while ((tmpb = get_user_char(tmpa++)))
		    con_charout(tmpb);
		con_charout('\"');
		break;

	    case P_PSTR:
		con_charout('&');
		con_charout('\"');
		tmpa = p->s_param[i];
		while ((tmpb = get_user_char(tmpa++)))
		    con_charout(tmpb);
		con_charout('\"');
		break;

	    case P_USHORT:
		printk("%u", p->s_param[i]);
		break;

	    case P_SSHORT:
		printk("%d", p->s_param[i]);
		break;

	    case P_PUSHORT:
		printk("&%u", p->s_param[i]);
		break;

	    case P_PSSHORT:
		printk("&%d", p->s_param[i]);
		break;

	    case P_SLONG:
		printk("%ld", p->s_param[i]);
		break;

	    case P_ULONG:
		printk("%lu", p->s_param[i]);
		break;

	    case P_PSLONG:
		printk("%ld", get_user_long(p->s_param[i]));
		break;

	    case P_PULONG:
		printk("%lu", get_user_long(p->s_param[i]));
		break;

	    default:
		break;
	    }

	}

    }
#ifdef STRACE_RETWAIT
    printk(") = %d]\n", retval);
#else
    p->s_name = elks_table[tent].s_name;
    printk(")]");
#endif
}
Пример #5
0
int tty_read(struct inode *inode, struct file *file, char *data, int len)
{
#if 1
    register struct tty *tty = determine_tty(inode->i_rdev);
    register char *pi = 0;
    int j, k;
    int rawmode = (tty->termios.c_lflag & ICANON) ? 0 : 1;
    int blocking = (file->f_flags & O_NONBLOCK) ? 0 : 1;
    unsigned char ch;

    if (len != 0) {
	do {
	    if (tty->ops->read) {
		tty->ops->read(tty);
		blocking = 0;
	    }
	    j = chq_getch(&tty->inq, &ch, blocking);

	    if (j == -1) {
		if (!blocking)
		    break;
		return -EINTR;
	    }
	    if (!rawmode && (j == 04))	/* CTRL-D */
		break;
	    if (rawmode || (j != '\b')) {
		put_user_char(ch, (void *)(data++));
		++pi;
		tty_echo(tty, ch);
	    } else if (((int)pi) > 0) {
		--pi;
		k = ((get_user_char((void *)(--data))
		      == '\t') ? TAB_SPACES : 1);
		do {
		    tty_echo(tty, ch);
		} while (--k);
	    }
	} while (((int)pi) < len && (rawmode || j != '\n'));
    }
    return (int) pi;


#else
    register struct tty *tty = determine_tty(inode->i_rdev);
    int i = 0, j = 0, k, lch;
    int rawmode = (tty->termios.c_lflag & ICANON) ? 0 : 1;
    int blocking = (file->f_flags & O_NONBLOCK) ? 0 : 1;
    unsigned char ch;

    if (len == 0)
	return 0;

    do {
	if (tty->ops->read) {
	    tty->ops->read(tty);
	    blocking = 0;
	}
	j = chq_getch(&tty->inq, &ch, blocking);

	if (j == -1)
	    if (blocking)
		return -EINTR;
	    else
		break;
	if (!rawmode && (j == 04))	/* CTRL-D */
	    break;
	if (rawmode || (j != '\b')) {
	    put_user_char(ch, (void *)(data + i++));
	    tty_echo(tty, ch);
	} else if (i > 0) {
	    lch = ((get_user_char((void *)(data + --i)) == '\t')
			? TAB_SPACES : 1);
	    for (k = 0; k < lch; k++)
		tty_echo(tty, ch);
	}
    } while (i < len && (rawmode || j != '\n'));

    return i;
#endif
}