null+****@clear*****
null+****@clear*****
2010年 6月 10日 (木) 08:05:56 JST
Kouhei Sutou 2010-06-09 23:05:56 +0000 (Wed, 09 Jun 2010) New Revision: c2c2ae1a5b536e06d6a56fd7dbd6585852c3aa87 Log: keep original string pointer. Modified files: lib/db.c Modified: lib/db.c (+10 -9) =================================================================== --- lib/db.c 2010-06-09 13:38:10 +0000 (5c72202) +++ lib/db.c 2010-06-09 23:05:56 +0000 (74499ae) @@ -6823,6 +6823,7 @@ grn_table_sort_key * grn_table_sort_key_from_str(grn_ctx *ctx, const char *str, unsigned str_size, grn_obj *table, unsigned *nkeys) { + const char *p = str; const char **tokbuf; grn_table_sort_key *keys = NULL, *k = NULL; if ((tokbuf = GRN_MALLOCN(const char *, str_size))) { @@ -6831,23 +6832,23 @@ grn_table_sort_key_from_str(grn_ctx *ctx, const char *str, unsigned str_size, k = keys; for (i = 0; i < n; i++) { const char *r = tokbuf[i]; - while (str < r && (' ' == *str || ',' == *str)) { str++; } - if (str < r) { + while (p < r && (' ' == *p || ',' == *p)) { p++; } + if (p < r) { k->flags = GRN_TABLE_SORT_ASC; k->offset = 0; - if (*str == '+') { - str++; - } else if (*str == '-') { + if (*p == '+') { + p++; + } else if (*p == '-') { k->flags = GRN_TABLE_SORT_DESC; - str++; + p++; } - if (!(k->key = grn_obj_column(ctx, table, str, r - str))) { - WARN(GRN_INVALID_ARGUMENT, "invalid sort key: <%.*s>", tokbuf[i] - str, str); + if (!(k->key = grn_obj_column(ctx, table, p, r - p))) { + WARN(GRN_INVALID_ARGUMENT, "invalid sort key: <%.*s>", tokbuf[i] - p, p); break; } k++; } - str = r; + p = r; } } GRN_FREE(tokbuf);