Esempio n. 1
0
int fsync_shpref_init(int uid)
{
  shmap_t *h;
  struct stat st;
  char *path;
  char *data;
  shkey_t *key;
  size_t data_len;
  size_t len;
  int err;
  int b_of;

  h = shmap_init();
  if (!h)
    return (SHERR_NOMEM);


  path = shpref_path(uid);
  err = shfs_read_mem(path, &data, &data_len);
  if (!err) { /* file may not have existed. */
    shbuf_t *buff = shbuf_map(data, data_len);
    shmap_load(h, buff);
    free(buff);
  }

  free(key);

  fsync_preferences = h;
  fsync_preferences_data = data;

  return (0);
}
Esempio n. 2
0
/**
 * Store supplementary credential data in a file.
 */
int shfs_cred_store(shfs_ino_t *file, shkey_t *key, unsigned char *data, size_t data_len)
{
  shfs_ino_t *cred;
  shbuf_t *buff;
  char key_buf[MAX_SHARE_HASH_LENGTH];
  int err;

  memset(key_buf, 0, sizeof(key_buf));
  sprintf(key_buf, "%s", shkey_hex(key));
  cred = shfs_inode(file, key_buf, SHINODE_ACCESS);
  if (!cred)
    return (SHERR_IO);

  cred->blk.hdr.format = SHINODE_ACCESS;
  buff = shbuf_map(data, data_len);
  err = shfs_aux_write(cred, buff);
  free(buff);
  if (err)
    return (err);

  file->blk.hdr.attr |= SHATTR_CRED;
  file->blk.hdr.crc = shcrc(data, data_len);
  file->blk.hdr.size = data_len;
  err = shfs_inode_write_entity(file);
  if (err)
    return (err);

  return (0);
}
Esempio n. 3
0
int shfs_file_write(shfs_ino_t *file, unsigned char *data, size_t data_len)
{
  shbuf_t *buff = shbuf_map(data, data_len);
  int err;

  err = shfs_write(file, buff);
  free(buff);

  return (err);
}
Esempio n. 4
0
int shfs_write_mem(char *path, void *data, size_t data_len)
{
  shbuf_t *buff;
  int err;

  buff = shbuf_map(data, data_len);
  err = shfs_mem_write(path, buff);
  shbuf_unmap(buff);

  return (err);
}