示例#1
0
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;
}
示例#2
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;
}
示例#3
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;
}
示例#4
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;
}
示例#5
0
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;
}
示例#6
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;
}
示例#7
0
文件: sharepie.c 项目: coapie/PieBox
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;
}
示例#8
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;
}
示例#9
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;
}
示例#10
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;
}