Ejemplo n.º 1
0
__attribute__((noinline)) void
fn0 (void)
{
  pthread_cleanup_push (clh, (void *) 1l);

  fn_read ();

  pthread_cleanup_pop (1);
}
Ejemplo n.º 2
0
/****************************************************************************
 *
 * fn_getc
 *
 * get a character from file
 *
 * INPUTS
 *
 * filehandle - file where to read from
 *
 * RETURNS
 *
 * with the read character or -1 if read was not successfully
 *
 ***************************************************************************/
int fn_getc ( F_FILE * filehandle )
{
  unsigned char  ch;

  if ( !fn_read( &ch, 1, 1, filehandle ) )
  {
    return -1;
  }

  return (int)ch;
}
Ejemplo n.º 3
0
static int fn(void *d)
{
    struct l4fdx_client *client = d;
    int err;

    err = sys_setregid(client->gid, client->gid);
    err = sys_setreuid(client->uid, client->uid);
    err = sys_setsid();

    if (client->capname)
        snprintf(current->comm, sizeof(current->comm),
                 "l4xfdx-%s", client->capname);
    else
        snprintf(current->comm, sizeof(current->comm),
                 "l4xfdx-%lx", client->cap >> L4_CAP_SHIFT);
    current->comm[sizeof(current->comm) - 1] = 0;

    set_user_nice(current, -20);

    while (!should_stop || !list_empty(&client->req_list)) {
        struct internal_request *r;

        wait_event_interruptible(client->event,
                                 !list_empty(&client->req_list)
                                 || should_stop);

        r = pop_request(client->srv_obj);

        switch (r->type) {
        case L4FS_REQ_OPEN:
            fn_open(client->srv_obj, r);
            break;
        case L4FS_REQ_READ:
            fn_read(client->srv_obj, r);
            break;
        case L4FS_REQ_WRITE:
            fn_write(client->srv_obj, r);
            break;
        case L4FS_REQ_CLOSE:
            fn_close(client->srv_obj, r);
            break;
        case L4FS_REQ_FSTAT64:
            fn_fstat64(client->srv_obj, r);
            break;
        default:
            pr_err("l4fdx: Invalid type=%d\n", r->type);
            break;
        }
    }

    return 0;
}
Ejemplo n.º 4
0
/*
** fr_read
**
** Read from a file.
**
** INPUT : buf - buffer to read data
**         size - number of unique
**         size_st - size of unique
**         *filehandle - pointer to file descriptor
** OUTPUT: number of read bytes
*/
long fr_read ( void * bbuf, long size, long size_st, F_FILE * filehandle )
{
  long  rc;

  if( xSemaphoreTake( fs_lock_semaphore, F_MAX_LOCK_WAIT_TICKS ) == pdPASS )
  {
    rc = fn_read( bbuf, size, size_st, filehandle );
    xSemaphoreGive( fs_lock_semaphore );
  }
  else
  {
    rc = 0;
  }

  return rc;
}