コード例 #1
0
ファイル: mmg.c プロジェクト: pombredanne/cmoon
char* mmg_get_valuef(mmg_conn *db, char *dsn, char *key, int skip, char *qfmt, ...)
{
    HDF *tmpnode; hdf_init(&tmpnode);
    char *val, *querys, sels[256];
    va_list ap;
    NEOERR *err;

    va_start(ap, qfmt);
    querys = vsprintf_alloc(qfmt, ap);
    va_end(ap);
    if (!querys) {
        mtc_err("Unable to allocate mem for query string");
        return NULL;
    }

    snprintf(sels, sizeof(sels), "{'%s': 1}", key);
    err = mmg_prepare(db, MMG_FLAG_EMPTY, skip, 1, NULL, sels, querys);
    RETURN_V_NOK(err, NULL);

    err = mmg_query(db, dsn, NULL, tmpnode);
    RETURN_V_NOK(err, NULL);

    err = hdf_get_copy(tmpnode, key, &val, NULL);
    RETURN_V_NOK(err, NULL);

    hdf_destroy(&tmpnode);
    SAFE_FREE(querys);

    return val;
}
コード例 #2
0
char *
sprintf_alloc (const char *fmt, ...)
{
    assert (fmt != NULL);

    va_list args;

    va_start (args,fmt);
    char *buf = vsprintf_alloc (fmt, args);
    va_end (args);

    return buf;
}
コード例 #3
0
ファイル: smsalarm.c プロジェクト: adderly/cmoon
void smsalarm_msgf(char *fmt, ...)
{
    char *msg;
    va_list ap;

    va_start(ap, fmt);
    msg = vsprintf_alloc(fmt, ap);
    va_end(ap);
    if (msg == NULL) return ;

    smsalarm_msg(msg);
    free(msg);
}
コード例 #4
0
ファイル: neo_hdf.c プロジェクト: bigclean/moc
char* hdf_get_valuevf (HDF *hdf, const char *namefmt, va_list ap)
{
  HDF *node;
  char *name;

  name = vsprintf_alloc(namefmt, ap);
  if (name == NULL) return NULL;
  if ((_walk_hdf(hdf, name, &node) == 0) && (node->value != NULL))
  {
    free(name);
    return node->value;
  }
  free(name);
  return NULL;
}
コード例 #5
0
ファイル: mcs.c プロジェクト: pombredanne/cmoon
char* mcs_prepend_string_valuef(HDF *node, char *key, char *sfmt, ...)
{
    char *qa, *rs;
    va_list ap;
    
    va_start(ap, sfmt);
    qa = vsprintf_alloc(sfmt, ap);
    va_end(ap);
    if (!qa) return NULL;

    rs = mcs_prepend_string_value(node, key, qa);
    
    free(qa);

    return rs;
}
コード例 #6
0
ファイル: mmg.c プロジェクト: pombredanne/cmoon
NEOERR* mmg_deletef(mmg_conn *db, char *dsn, int flags, char *selfmt, ...)
{
    char *qa;
    va_list ap;
    NEOERR *err;
    
    va_start(ap, selfmt);
    qa = vsprintf_alloc(selfmt, ap);
    va_end(ap);
    if (!qa) return nerr_raise(NERR_NOMEM, "Unable to allocate mem for string");

    err = mmg_delete(db, dsn, flags, qa);
    if (err != STATUS_OK) return nerr_pass(err);

    free(qa);

    return STATUS_OK;
}
コード例 #7
0
ファイル: mmg.c プロジェクト: pombredanne/cmoon
NEOERR* mmg_countf(mmg_conn *db, char *dbname, char *collname, int *ret, char *qfmt, ...)
{
    char *qa;
    va_list ap;
    NEOERR *err;
    
    va_start(ap, qfmt);
    qa = vsprintf_alloc(qfmt, ap);
    va_end(ap);
    if (!qa) return nerr_raise(NERR_NOMEM, "Unable to allocate mem for string");

    err = mmg_count(db, dbname, collname, ret, qa);
    if (err != STATUS_OK) return nerr_pass(err);

    free(qa);

    return STATUS_OK;
}
コード例 #8
0
ファイル: mmg.c プロジェクト: pombredanne/cmoon
int mmg_get_int_valuef(mmg_conn *db, char *dsn, char *key, int skip, int limit,
                       char *qfmt, ...)
{
    HDF *tmpnode; hdf_init(&tmpnode);
    char *querys, sels[256];
    int val;
    va_list ap;
    HDF *node;
    NEOERR *err;

    va_start(ap, qfmt);
    querys = vsprintf_alloc(qfmt, ap);
    va_end(ap);
    if (!querys) {
        mtc_err("Unable to allocate mem for query string");
        return 0;
    }

    snprintf(sels, sizeof(sels), "{'%s': 1}", key);
    err = mmg_prepare(db, MMG_FLAG_EMPTY, skip, limit, NULL, sels, querys);
    RETURN_V_NOK(err, 0);

    err = mmg_query(db, dsn, NULL, tmpnode);
    RETURN_V_NOK(err, 0);

    val = 0;
    
    if(hdf_get_valuef(tmpnode, "0.%s", key)) {
        node = hdf_obj_child(tmpnode);
        while (node) {
            val += hdf_get_int_value(node, key, 0);
            
            node = hdf_obj_next(node);
        }
    } else {
        val = hdf_get_int_value(tmpnode, key, 0);
    }

    hdf_destroy(&tmpnode);
    SAFE_FREE(querys);

    return val;
}
コード例 #9
0
ファイル: mmg.c プロジェクト: pombredanne/cmoon
NEOERR* mmg_customf(mmg_conn *db, char *dbname,
                    char *prefix, HDF *outnode, char *cmdfmt, ...)
{
    char *qa;
    va_list ap;
    NEOERR *err;
    
    va_start(ap, cmdfmt);
    qa = vsprintf_alloc(cmdfmt, ap);
    va_end(ap);
    if (!qa) return nerr_raise(NERR_NOMEM, "Unable to allocate mem for string");

    err = mmg_custom(db, dbname, prefix, outnode, qa);
    if (err != STATUS_OK) return nerr_pass(err);

    free(qa);

    return STATUS_OK;
}
コード例 #10
0
ファイル: mmg.c プロジェクト: pombredanne/cmoon
NEOERR* mmg_preparef(mmg_conn *db, int flags, int skip, int limit,
                     NEOERR* (*qcbk)(mmg_conn *db, HDF *node, bool lastone),
                     char *sels, char *qfmt, ...)
{
    char *querys;
    va_list ap;
    NEOERR *err;

    va_start(ap, qfmt);
    querys = vsprintf_alloc(qfmt, ap);
    va_end(ap);
    if (!querys) return nerr_raise(NERR_NOMEM, "Unable to allocate mem for query string");

    err = mmg_prepare(db, flags, skip, limit, qcbk, sels, querys);
    if (err != STATUS_OK) return nerr_pass(err);

    free(querys);
    return STATUS_OK;
}
コード例 #11
0
ファイル: neo_hdf.c プロジェクト: bigclean/moc
NEOERR* hdf_set_valuevf (HDF *hdf, const char *fmt, va_list ap)
{
  NEOERR *err;
  char *k;
  char *v;

  k = vsprintf_alloc(fmt, ap);
  if (k == NULL)
  {
    return nerr_raise(NERR_NOMEM, "Unable to allocate memory for format string");
  }
  v = strchr(k, '=');
  if (v == NULL)
  {
    err = nerr_raise(NERR_ASSERT, "No equals found: %s", k);
    free(k);
    return err;
  }
  *v++ = '\0';
  err = hdf_set_value(hdf, k, v);
  free(k);
  return nerr_pass(err);
}