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); }
/** * 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); }
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); }
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); }