int stor_fmoveto_req_unmash(void *ptr, cmp_reader reader, cmp_writer writer, struct _stor_fmoveto_req **out){ struct _stor_fmoveto_req *o; cmp_ctx_t cmp; cmp_init(&cmp, ptr, reader, writer); o = (struct _stor_fmoveto_req*)osapi_malloc(sizeof(*o)); if(o == NULL) return -ENOMEM; memset(o, 0, sizeof(*o)); cmp_read_long(&cmp,&o->fid); cmp_read_long(&cmp,&o->folder); { uint32_t size; cmp_read_str_size(&cmp, &size); if(size == 0){ o->fname = NULL; }else{ o->fname = (char*)osapi_malloc(size+1); if(o->fname == NULL){ osapi_free(o); return -ENOMEM; } reader(&cmp, o->fname, size); o->fname[size] = 0; } } *out = o; return 0; }
int stor_fwrite_req_unmash(void *ptr, cmp_reader reader, cmp_writer writer, struct _stor_fwrite_req **out){ struct _stor_fwrite_req *o; cmp_ctx_t cmp; cmp_init(&cmp, ptr, reader, writer); o = (struct _stor_fwrite_req*)osapi_malloc(sizeof(*o)); if(o == NULL) return -ENOMEM; memset(o, 0, sizeof(*o)); cmp_read_long(&cmp,&o->fid); cmp_read_long(&cmp,&o->offset); cmp_read_bin_size(&cmp, &o->data_len); if(o->data_len == 0){ o->data = NULL; }else{ o->data = osapi_malloc(o->data_len); if(o->data == NULL){ stor_fwrite_req_free(o); return -ENOMEM; } reader(&cmp, o->data, o->data_len); } *out = o; return 0; }
static int header_unpack(struct evbuffer *in, spie_header_t **buf){ spie_header_t *pro; int16_t nsize = SPIE_HEADER_LEN; int len; int evlen; ev_ssize_t es; evlen = evbuffer_get_length(in); if(evlen == 0){ return -SPIE_ECODE_INVAL; } if(evlen < SPIE_HEADER_LEN){ log_warn("evbuffer - buffer is to small:%d\n", evlen); return -SPIE_ECODE_INVAL; } // get the payload size es = evbuffer_copyout(in, &nsize, sizeof(nsize)); if(es != sizeof(nsize)){ log_warn("evbuffer read command size fail!\n"); return -SPIE_ECODE_INVAL; } len = ntohs(nsize) + SPIE_HEADER_LEN; evlen = evbuffer_get_length(in); if(evlen < len){ return -SPIE_ECODE_INVAL; } pro = osapi_malloc(len); if(pro == NULL){ log_warn("no enough memory for unpack protocols\n"); return -SPIE_ECODE_NOMEM; } memset(pro, 0, len); es = evbuffer_copyout(in, pro, len); if(es != len){ log_warn("read whole package from buffer fail:%d", es); osapi_free(pro); return -SPIE_ECODE_INVAL; } evbuffer_drain(in, len); pro->size = ntohs(pro->size); pro->sesid = ntohl(pro->sesid); pro->seqid = ntohl(pro->seqid); pro->cred = ntohl(pro->cred); *buf = pro; return 0; }
fixbuffer_t *fixbuffer_new(){ fixbuffer_t *fb; fb = osapi_malloc(sizeof(*fb)); if(fb == NULL){ return NULL; } fb->len = FIXBUFFER_DEFAULT_BUFFER_LEN; fb->start = 0; fb->end = 0; fb->buffer = osapi_malloc(fb->len); if(fb->buffer == NULL){ osapi_free(fb); return NULL; } return fb; }
int stor_fclose_rsp_unmash(void *ptr, cmp_reader reader, cmp_writer writer, struct _stor_fclose_rsp **out){ struct _stor_fclose_rsp *o; cmp_ctx_t cmp; cmp_init(&cmp, ptr, reader, writer); o = (struct _stor_fclose_rsp*)osapi_malloc(sizeof(*o)); if(o == NULL) return -ENOMEM; memset(o, 0, sizeof(*o)); cmp_read_int(&cmp, &o->errcode); *out = o; return 0; }
int stor_lookup_destroy_req_unmash(void *ptr, cmp_reader reader, cmp_writer writer, struct _stor_lookup_destroy_req **out){ struct _stor_lookup_destroy_req *o; cmp_ctx_t cmp; cmp_init(&cmp, ptr, reader, writer); o = (struct _stor_lookup_destroy_req*)osapi_malloc(sizeof(*o)); if(o == NULL) return -ENOMEM; memset(o, 0, sizeof(*o)); cmp_read_long(&cmp,&o->luid); *out = o; return 0; }
int spie_set_param(sharepie_t *sp, const char *rdir, short port){ int len; log_info("spie set param : %s %d\n", rdir, port); sp->port = port; len = strlen(rdir) + 1; sp->rdir = osapi_malloc(len); if(sp->rdir == NULL){ log_warn("malloc memory for spie rdir fail\n"); return -ENOMEM; } strcpy(sp->rdir, rdir); return 0; }
int fixbuffer_expand(fixbuffer_t *fb, size_t len){ void *buffer, *temp; size_t new_len; new_len = fb->len + len; new_len = FIXBUFFER_ALIGN(new_len, FIXBUFFER_DEFAULT_BUFFER_LEN); buffer = osapi_malloc(new_len); if(buffer == NULL){ return -1; } memcpy(buffer, fb->buffer + fb->start, fb->end - fb->start); temp = fb->buffer; fb->buffer = buffer; fb->end = fb->end - fb->start; fb->start = 0; fb->len = new_len; osapi_free(temp); return 0; }
int stor_lookup_next_rsp_unmash(void *ptr, cmp_reader reader, cmp_writer writer, struct _stor_lookup_next_rsp **out){ struct _stor_lookup_next_rsp *o; cmp_ctx_t cmp; cmp_init(&cmp, ptr, reader, writer); o = (struct _stor_lookup_next_rsp*)osapi_malloc(sizeof(*o)); if(o == NULL) return -ENOMEM; memset(o, 0, sizeof(*o)); cmp_read_long(&cmp,&o->luid); { stor_fstat_rsp_t *obj; uint32_t size; int i; cmp_read_array(&cmp, &size); fixarray_create(size, &o->rfiles); for (i = 0; i < size; i++){ obj = osapi_malloc(sizeof(*obj)); if(obj == NULL) { osapi_free(o); return -ENOMEM; } cmp_read_long(&cmp,&obj->fid); { uint32_t size; cmp_read_str_size(&cmp, &size); if(size == 0){ obj->fname = NULL; }else{ obj->fname = (char*)osapi_malloc(size+1); if(obj->fname == NULL){ osapi_free(o); return -ENOMEM; } reader(&cmp, obj->fname, size); obj->fname[size] = 0; } } { uint32_t size; cmp_read_str_size(&cmp, &size); if(size == 0){ obj->folder = NULL; }else{ obj->folder = (char*)osapi_malloc(size+1); if(obj->folder == NULL){ osapi_free(o); return -ENOMEM; } reader(&cmp, obj->folder, size); obj->folder[size] = 0; } } cmp_read_int(&cmp, &obj->type); cmp_read_long(&cmp,&obj->fatime); cmp_read_long(&cmp,&obj->fmtime); cmp_read_long(&cmp,&obj->fctime); cmp_read_long(&cmp,&obj->fsize); cmp_read_bin_size(&cmp, &obj->snap_len); if(obj->snap_len == 0){ obj->snap = NULL; }else{ obj->snap = osapi_malloc(obj->snap_len); if(obj->snap == NULL){ return -ENOMEM; } reader(ptr, obj->snap, obj->snap_len); } fixarray_set(o->rfiles, i, obj); } } *out = o; return 0; }
int stor_fstat_rsp_unmash(void *ptr, cmp_reader reader, cmp_writer writer, struct _stor_fstat_rsp **out){ struct _stor_fstat_rsp *o; cmp_ctx_t cmp; cmp_init(&cmp, ptr, reader, writer); o = (struct _stor_fstat_rsp*)osapi_malloc(sizeof(*o)); if(o == NULL) return -ENOMEM; memset(o, 0, sizeof(*o)); cmp_read_long(&cmp,&o->fid); { uint32_t size; cmp_read_str_size(&cmp, &size); if(size == 0){ o->fname = NULL; }else{ o->fname = (char*)osapi_malloc(size+1); if(o->fname == NULL){ osapi_free(o); return -ENOMEM; } reader(&cmp, o->fname, size); o->fname[size] = 0; } } { uint32_t size; cmp_read_str_size(&cmp, &size); if(size == 0){ o->folder = NULL; }else{ o->folder = (char*)osapi_malloc(size+1); if(o->folder == NULL){ osapi_free(o); return -ENOMEM; } reader(&cmp, o->folder, size); o->folder[size] = 0; } } cmp_read_int(&cmp, &o->type); cmp_read_long(&cmp,&o->fatime); cmp_read_long(&cmp,&o->fmtime); cmp_read_long(&cmp,&o->fctime); cmp_read_long(&cmp,&o->fsize); cmp_read_bin_size(&cmp, &o->snap_len); if(o->snap_len == 0){ o->snap = NULL; }else{ o->snap = osapi_malloc(o->snap_len); if(o->snap == NULL){ stor_fstat_rsp_free(o); return -ENOMEM; } reader(&cmp, o->snap, o->snap_len); } *out = o; return 0; }