示例#1
0
void encode_entry( char *str )
{
  int   match_cnt;
  int   len;
  char  buf[ MAX_STR ];

  if ( cur_entry - 1 >= 0 ) {

    compare_entry(str, &match_cnt);

    /* need to match more than one char to be useful */
    
    if ( match_cnt > 1 ) {

      buf[0] = (signed char) - match_cnt;
      copy_str(&buf[1], str + match_cnt);
      len = get_strlen( buf );
      entry[ cur_entry ] = (char *) malloc( len + 1 );
      copy_str( entry[ cur_entry ], buf );

    } else {

      entry[ cur_entry ] = (char *) strdup( str );
    }

  } else {
    
    entry[ cur_entry ] = (char *) strdup( str );
  }
}
示例#2
0
/*
 *   begin a SRCF file entry 
 */
void CVmImageWriter::begin_srcf_entry(int orig_index, const char *fname)
{
    size_t len;

    /* remember where this entry starts, so we can fix up the size later */
    srcf_entry_pos_ = fp_->get_pos();

    /* write a placeholder size entry */
    fp_->write_uint4(0);
    
    /* write the original index */
    fp_->write_uint2(orig_index);

    /* write the length of the name */
    len = get_strlen(fname);
    fp_->write_uint2(len);

    /* write the filename */
    fp_->write_bytes(fname, len);

    /* we have no line record yet, so write a placeholder count */
    srcf_line_pos_ = fp_->get_pos();
    fp_->write_uint4(0);
    srcf_line_cnt_ = 0;
}
示例#3
0
static lcb_error_t
setopt(lcb_N1QLPARAMS *params,
       const char *k, size_t nk, const char *v, size_t nv, lcb_string *target)
{
    nv = get_strlen(v, nv);
    nk = get_strlen(k, nk);
    /* Do we need the '&'? */
    if (params->form.nused) {
        if (-1 == lcb_string_append(target, "&", 1)) {
            return LCB_CLIENT_ENOMEM;
        }
    }
    if (-1 == add_encstr(target, k, nk)) {
        return LCB_CLIENT_ENOMEM;
    }
    if (-1 == lcb_string_append(target, "=", 1)) {
        return LCB_CLIENT_ENOMEM;
    }
    if (-1 == add_encstr(target, v, nv)) {
        return LCB_CLIENT_ENOMEM;
    }
    return LCB_SUCCESS;
}
示例#4
0
lcb_error_t
lcb_n1p_posparam(lcb_N1QLPARAMS *params, const char *value, size_t nvalue)
{
    nvalue = get_strlen(value, nvalue);
    if (-1 == lcb_string_reserve(&params->posargs, nvalue+3)) {
        return LCB_CLIENT_ENOMEM;
    }

    if (!params->posargs.nused) {
        lcb_string_append(&params->posargs, "[", 1);
    } else {
        lcb_string_append(&params->posargs, ",", 1);
    }
    lcb_string_append(&params->posargs, value, nvalue);
    return LCB_SUCCESS;
}
示例#5
0
/**
 * 計算結果
 *
 * @param[in] calc calcinfo構造体
 * @param[in] expr 式
 * @return 新たに領域確保された結果文字列ポインタ
 * @retval NULL エラー
 * @attention destroy_answerを必ず呼ぶこと.
 */
uchar *
create_answer(calcinfo *calc, const uchar *expr)
{
    dbl val = 0.0;     /* 値 */
    size_t length = 0; /* 文字数 */
    int retval = 0;    /* 戻り値 */
    uint start = 0;    /* タイマ開始 */

    dbglog("start");

    calc->ptr = (uchar *)expr; /* 走査用ポインタ */
    dbglog("ptr=%p", calc->ptr);

    /* フォーマット設定 */
    retval = snprintf(calc->fmt, sizeof(calc->fmt),
                      "%s%ld%s", "%.", digit, "g");
    if (retval < 0) {
        outlog("snprintf");
        return NULL;
    }
    dbglog("fmt=%s", calc->fmt);

    readch(calc);

    if (g_tflag)
        start_timer(&start);

    val = expression(calc);
    dbglog(calc->fmt, val);
    dbglog("ptr=%p, ch=%c", calc->ptr, calc->ch);

    check_validate(calc, val);
    if (calc->ch != '\0') /* エラー */
        set_errorcode(calc, E_SYNTAX);

    if (g_tflag) {
        uint calc_time = stop_timer(&start);
        print_timer(calc_time);
    }

    if (is_error(calc)) { /* エラー */
        calc->answer = get_errormsg(calc);
        clear_error(calc);
        if (!calc->answer)
            return NULL;
        dbglog("answer=%p, length=%zu", calc->answer, length);
    } else {
        /* 文字数取得 */
        retval = get_strlen(val, calc->fmt);
        if (retval <= 0) { /* エラー */
            outlog("get_strlen=%d", retval);
            return NULL;
        }
        dbglog("get_strlen=%d, INT_MAX=%d", retval, INT_MAX);
        length = (size_t)retval + 1; /* 文字数 + 1 */

        /* メモリ確保 */
        calc->answer = (uchar *)malloc(length * sizeof(uchar));
        if (!calc->answer) {
            outlog("malloc: length=%zu", length);
            return NULL;
        }
        (void)memset(calc->answer, 0, length * sizeof(uchar));

        /* 値を文字列に変換 */
        retval = snprintf((char *)calc->answer, length, calc->fmt, val);
        if (retval < 0) {
            outlog("snprintf: answer=%p, length=%zu", calc->answer, length);
            return NULL;
        }
        dbglog(calc->fmt, val);
        dbglog("answer=%s, length=%zu", calc->answer, length);
    }
    return calc->answer;
}
示例#6
0
int main(int argc, char *argv[]) {
	char *str = "Good morning my friend!";
	printf("%d\n", get_strlen(str));
}
示例#7
0
int redis_string::get_strlen(const char* key)
{
	return get_strlen(key, strlen(key));
}