Пример #1
0
Файл: root.c Проект: suztomo/hp
static int hp_open_control(int type, struct file *file)
{
  /*
    hp_alloc assures that the region is filled with zero.
   */
  struct hp_io_buffer *buf = hp_alloc(sizeof(struct hp_io_buffer));
  buf->writebuf_size = sizeof(buf->write_buf);
  buf->write_cur = 0;
  buf->read_cur = 0;
  mutex_init(&buf->io_sem);
  /*
    The private data field is used in hp_read_control
    to handle several special devices in an interface.
   */
  file->private_data = buf;
  switch(type) {
  case HP_DENTRY_KEY_NODECONF_IP:
    /*
      security/hp/ip_node
     */
    buf->write = hp_nodeconf_ip_write;
    hp_nodeconf_ip_setup_readbuf(buf);
    break;
  case HP_DENTRY_KEY_NODECONF_PORT:
    /*
      security/hp/ip_port
    */
    buf->write = hp_nodeconf_port_write;
    hp_nodeconf_port_setup_readbuf(buf);
    break;
  case HP_DENTRY_KEY_NODECONF_SELFCONF:
    buf->write = hp_nodeconf_selfconf;
    hp_nodeconf_port_setup_readbuf(buf);
    break;
  case HP_DENTRY_KEY_TTY_OUTPUT_ALL:
    buf->write = NULL;
    //    hp_tty_output_all_setup_readbuf(buf);
    debug("tty_output/all is opened");
    buf->read = hp_tty_output_all_read;
    break;

  case HP_DENTRY_KEY_TTY_OUTPUT_SETUP:
    /*
      security/hp/
      setups security/hp/tty_output/
     */
    buf->write = NULL;
    hp_tty_output_prepare_output_files();
    /* Dummy contents */
    buf->read_buf = hp_alloc(1);
    buf->read_buf[0] = '0';
    buf->readbuf_size = 1;

    break;
  default:
    break;
  }
  return 0;
}
Пример #2
0
/*ARGSUSED*/
static int
p_get_oracle3(value vfrom, type tfrom, value vto, type tto, value v, type t)
{
    pword *b_aux;
    char *buf;
    int size;

    if (IsRef(tto))
    {
	b_aux = B.args;
	while (!IsParallelFrame(BTop(b_aux)))
	    b_aux = BPrev(b_aux);
    }
    else
	b_aux = vto.ptr;

    size = oracle_size(vfrom.ptr, b_aux);
    buf = (char *) hp_alloc(size);
    retrieve_oracle(buf, size, vfrom.ptr, b_aux);

    Return_Unify_Integer(v, t, (long) buf);
}