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);