static int apipe_write( const char* path, const char* buf, size_t count, off_t offset, struct fuse_file_info* info) { if (count == 0) return 0; struct PP_Var req_var = nspawn_dict_create(); nspawn_dict_setstring(req_var, "command", "nacl_apipe_write"); nspawn_dict_setint(req_var, "pipe_id", info->fh); struct PP_Var data = PSInterfaceVarArrayBuffer()->Create(count); if (data.type == PP_VARTYPE_NULL) return -EIO; void *p = PSInterfaceVarArrayBuffer()->Map(data); if (count > 0 && !p) { nspawn_var_release(data); nspawn_var_release(req_var); return -EIO; } memcpy(p, buf, count); PSInterfaceVarArrayBuffer()->Unmap(data); nspawn_dict_set(req_var, "data", data); struct PP_Var result_var = nspawn_send_request(req_var); int ret = nspawn_dict_getint(result_var, "count"); nspawn_var_release(result_var); return ret; }
void nspawn_dict_setint(struct PP_Var dict_var, const char* key, int32_t v) { nspawn_dict_set(dict_var, key, PP_MakeInt32(v)); }
void nspawn_dict_setstring(struct PP_Var dict, const char* key, const char* value) { struct PP_Var value_var = PSInterfaceVar()->VarFromUtf8(value, strlen(value)); nspawn_dict_set(dict, key, value_var); }