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; }
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; }
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; }
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 }
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 }