示例#1
0
dpl_status_t 
cb_cdmi_req_add_metadata(dpl_dict_var_t *var,
                         void *cb_arg)
{
  struct cdmi_req_add_md_arg *arg = (struct cdmi_req_add_md_arg *) cb_arg;
  dpl_status_t ret, ret2;
  char buf[256];

  snprintf(buf, sizeof (buf), "%smetadata:%s", arg->comma ? "," : "", var->key);

  ret2 = dpl_sbuf_add(arg->field, buf, strlen(buf));
  if (DPL_SUCCESS != ret2)
    {
      ret = ret2;
      goto end;
    }
  
  arg->comma = 1;

  ret = DPL_SUCCESS;
  
 end:

  return ret;
}
示例#2
0
dpl_status_t
dpl_cdmi_req_add_metadata(dpl_req_t *req,
                          const dpl_dict_t *metadata,
                          int append)
{
  dpl_status_t ret, ret2;
  struct cdmi_req_add_md_arg arg;

  memset(&arg, 0, sizeof (arg));

  if (append)
    {
      //iterate metadata object
      arg.field = dpl_sbuf_new(30);
      if (NULL == arg.field)
        {
          ret = DPL_ENOMEM;
          goto end;
        }

      ret2 = dpl_dict_iterate(metadata, cb_cdmi_req_add_metadata, &arg);
      if (DPL_SUCCESS != ret2)
        {
          ret = ret2;
          goto end;
        }

      ret2 = dpl_sbuf_add(arg.field, "", 1);
      if (DPL_SUCCESS != ret2)
        {
          ret = ret2;
          goto end;
        }

      ret2 = dpl_req_set_subresource(req, arg.field->buf);
      if (DPL_SUCCESS != ret2)
        {
          ret = ret2;
          goto end;
        }
    }

  ret2 = dpl_req_add_metadata(req, metadata);
  if (DPL_SUCCESS != ret2)
    {
      ret = ret2;
      goto end;
    }

  ret = DPL_SUCCESS;
  
 end:

  if (NULL != arg.field)
    dpl_sbuf_free(arg.field);

  return ret;
}
示例#3
0
文件: ntinydb.c 项目: cvedel/Droplet
/** 
 * 
 * 
 * @param blob 
 * @param key 
 * @param data 
 * @param datalen 
 * 
 * @return 
 */
dpl_status_t
dpl_ntinydb_set(dpl_sbuf_t *blob,
                const char *key, 
                char *data,
                int datalen)
{
  char flag;
  int keylen, ret;
  uint32_t len;

  flag = 0;
  ret = dpl_sbuf_add(blob, &flag, 1);
  if (-1 == ret)
    return DPL_FAILURE;

  keylen = strlen(key);
  len = htonl(keylen);

  ret = dpl_sbuf_add(blob, (char *)&len, sizeof (len));
  if (-1 == ret)
    return DPL_FAILURE;

  ret = dpl_sbuf_add(blob, key, keylen);
  if (-1 == ret)
    return DPL_FAILURE;

  len = htonl(datalen);
  ret = dpl_sbuf_add(blob, (char *)&len, sizeof (len));
  if (-1 == ret)
    return DPL_FAILURE;

  ret = dpl_sbuf_add(blob, data, datalen);
  if (-1 == ret)
    return DPL_FAILURE;

  //printf("ntinydb_set '%s' '%.*s'\n", key, datalen, data);

  dpl_sbuf_print(blob);

  return DPL_SUCCESS;
}
示例#4
0
dpl_sbuf_t *dpl_sbuf_dup(const dpl_sbuf_t *src)
{
  dpl_sbuf_t *dst;

  dst = dpl_sbuf_new(src->allocated);
  if (NULL == dst)
    return NULL;

  (void)dpl_sbuf_add(dst, src->buf, src->len);

  return dst;
}
示例#5
0
dpl_sbuf_add_str_fmt(dpl_sbuf_t *sb, const char *format, ...)
{
  char          buffer[4096];
  size_t        size;
  va_list       args;

  va_start(args, format);
  size = vsnprintf(buffer, sizeof(buffer), format, args);
  va_end(args);

  if (size >= sizeof(buffer))
    return DPL_ENOMEM;

  return dpl_sbuf_add(sb, buffer, size);
}
示例#6
0
dpl_status_t dpl_sbuf_add_str(dpl_sbuf_t *sb, const char *str)
{
  return dpl_sbuf_add(sb, str, strlen(str));
}
示例#7
0
static dpl_status_t
convert_obj_to_value(dpl_ctx_t *ctx,
                     struct json_object *obj,
                     int level,
                     dpl_value_t **valp)
{
  int ret, ret2;
  dpl_value_t *val = NULL;
  char *key; 
  struct lh_entry *entry;
  json_object *child;
  dpl_dict_t *subdict = NULL;
  dpl_vec_t *vector = NULL;

  DPRINTF("convert_obj_to_value level=%d type=%d\n", level, json_object_get_type(obj));

  val = malloc(sizeof (*val));
  if (NULL == val)
    {
      ret = DPL_ENOMEM;
      goto end;
    }
  memset(val, 0, sizeof (*val));

  switch (json_object_get_type(obj))
    {
    case json_type_null:
	  {
        ret = DPL_ENOTSUPP;
	  	goto end;
	  }
    case json_type_array:
      {
        int n_items = json_object_array_length(obj);
        int i;

        vector = dpl_vec_new(2, 2);
        if (NULL == vector)
          {
            ret = DPL_ENOMEM;
            goto end;
          }

        for (i = 0;i < n_items;i++)
          {
            child = json_object_array_get_idx(obj, i);
            dpl_value_t *subval;

            ret2 = convert_obj_to_value(ctx, child, level+1, &subval);
            if (DPL_SUCCESS != ret2)
              {
                ret = ret2;
                goto end;
              }
            
            ret2 = dpl_vec_add_value(vector, subval);

            dpl_value_free(subval);
            
            if (DPL_SUCCESS != ret2)
              {
                ret = ret2;
                goto end;
              }
          }

        val->type = DPL_VALUE_VECTOR;
        val->vector = vector;
        vector = NULL;
        break ;
      }
    case json_type_object:
      {
        subdict = dpl_dict_new(13);
        if (NULL == subdict)
          {
            ret = DPL_ENOMEM;
            goto end;
          }
        
        for (entry = json_object_get_object(obj)->head; (entry ? (key = (char*)entry->k, child = (struct json_object*)entry->v, entry) : 0); entry = entry->next)
          {
            dpl_value_t *subval;

            DPRINTF("key='%s'\n", key);

            ret2 = convert_obj_to_value(ctx, child, level+1, &subval);
            if (DPL_SUCCESS != ret2)
              {
                ret = ret2;
                goto end;
              }
            
            ret2 = dpl_dict_add_value(subdict, key, subval, 0);

            dpl_value_free(subval);

            if (DPL_SUCCESS != ret2)
              {
                ret = ret2;
                goto end;
              }
          }

        val->type = DPL_VALUE_SUBDICT;
        val->subdict = subdict;
        subdict = NULL;
        break ;
      }
    case json_type_boolean:
    case json_type_double:
    case json_type_int:
      {
        pthread_mutex_lock(&ctx->lock); //lock for objects other than string
        val->string = dpl_sbuf_new(16);
        if (NULL == val->string)
          {
            ret = DPL_ENOMEM;
            goto end;
          }
        dpl_sbuf_add_str(val->string, json_object_get_string(obj));
        pthread_mutex_unlock(&ctx->lock);

        val->type = DPL_VALUE_STRING;
        break ;
      }
    case json_type_string:
      {
        pthread_mutex_lock(&ctx->lock); //lock for objects other than string
	val->string = dpl_sbuf_new(json_object_get_string_length(obj) + 1);
        if (NULL == val->string)
          {
            ret = DPL_ENOMEM;
            goto end;
          }
        dpl_sbuf_add(val->string, json_object_get_string(obj),
                     json_object_get_string_length(obj));
        pthread_mutex_unlock(&ctx->lock);

        val->type = DPL_VALUE_STRING;
        break ;
      }
    }

  if (NULL != valp)
    {
      *valp = val;
      val = NULL;
    }

  ret = DPL_SUCCESS;
  
 end:

  if (NULL != vector)
    dpl_vec_free(vector);

  if (NULL != subdict)
    dpl_dict_free(subdict);

  if (NULL != val)
    dpl_value_free(val);

  DPRINTF("level=%d ret=%d\n", level, ret);

  return ret;
}