[Groonga-commit] groonga/groonga [master] Stopped raising error in grn_normalize_offset_and_limit().

Back to archive index

null+****@clear***** null+****@clear*****
2010年 7月 9日 (金) 14:58:28 JST


Daijiro MORI	2010-07-09 05:58:28 +0000 (Fri, 09 Jul 2010)

  New Revision: fd08e415ff38080c96a086ca83066e8ec7028aa5

  Log:
    Stopped raising error in grn_normalize_offset_and_limit().

  Modified files:
    groonga.h
    lib/db.c
    lib/proc.c
    lib/util.c

  Modified: groonga.h (+3 -0)
===================================================================
--- groonga.h    2010-07-08 14:23:11 +0000 (2361034)
+++ groonga.h    2010-07-09 05:58:28 +0000 (9d6febf)
@@ -106,6 +106,9 @@ typedef enum {
   GRN_RETRY_MAX = -64,
   GRN_INCOMPATIBLE_FILE_FORMAT = -65,
   GRN_UPDATE_NOT_ALLOWED = -66,
+  GRN_TOO_SMALL_OFFSET = -67,
+  GRN_TOO_LARGE_OFFSET = -68,
+  GRN_TOO_SMALL_LIMIT = -69
 } grn_rc;
 
 GRN_API grn_rc grn_init(void);

  Modified: lib/db.c (+9 -3)
===================================================================
--- lib/db.c    2010-07-08 14:23:11 +0000 (8030a77)
+++ lib/db.c    2010-07-09 05:58:28 +0000 (0b22830)
@@ -1739,10 +1739,14 @@ grn_table_cursor_open(grn_ctx *ctx, grn_obj *table,
                       const void *max, unsigned max_size,
                       int offset, int limit, int flags)
 {
+  grn_rc rc;
   grn_table_cursor *tc = NULL;
+  if (!table) { return tc; }
   GRN_API_ENTER;
-  if (table && !grn_normalize_offset_and_limit(ctx, grn_table_size(ctx, table),
-                                               &offset, &limit)) {
+  rc = grn_normalize_offset_and_limit(ctx, grn_table_size(ctx, table), &offset, &limit);
+  if (rc) {
+    ERR(rc, "grn_normalize_offset_and_limit failed");
+  } else {
     switch (table->header.type) {
     case GRN_DB :
       tc = (grn_table_cursor *)grn_pat_cursor_open(ctx, ((grn_db *)table)->keys,
@@ -6529,6 +6533,7 @@ int
 grn_table_sort(grn_ctx *ctx, grn_obj *table, int offset, int limit,
                grn_obj *result, grn_table_sort_key *keys, int n_keys)
 {
+  grn_rc rc;
   grn_obj *index;
   int n, e, i = 0;
   sort_entry *array, *ep;
@@ -6550,7 +6555,8 @@ grn_table_sort(grn_ctx *ctx, grn_obj *table, int offset, int limit,
     goto exit;
   }
   n = grn_table_size(ctx, table);
-  if (grn_normalize_offset_and_limit(ctx, n, &offset, &limit)) {
+  if ((rc = grn_normalize_offset_and_limit(ctx, n, &offset, &limit))) {
+    ERR(rc, "grn_normalize_offset_and_limit failed");
     goto exit;
   } else {
     e = offset + limit;

  Modified: lib/proc.c (+0 -2)
===================================================================
--- lib/proc.c    2010-07-08 14:23:11 +0000 (4e9ebec)
+++ lib/proc.c    2010-07-09 05:58:28 +0000 (d024590)
@@ -190,7 +190,6 @@ grn_select(grn_ctx *ctx, const char *table, unsigned table_len,
       }
 
       grn_normalize_offset_and_limit(ctx, nhits, &offset, &limit);
-      ERRCLR(ctx);
 
       if (sortby_len) {
         if ((sorted = grn_table_create(ctx, NULL, 0, NULL,
@@ -237,7 +236,6 @@ grn_select(grn_ctx *ctx, const char *table, unsigned table_len,
 
               grn_normalize_offset_and_limit(ctx, nhits,
                                              &n_drilldown_offset, &n_drilldown_limit);
-              ERRCLR(ctx);
 
               if (drilldown_sortby_len) {
                 if ((keys = grn_table_sort_key_from_str(ctx,

  Modified: lib/util.c (+9 -10)
===================================================================
--- lib/util.c    2010-07-08 14:23:11 +0000 (21f2d42)
+++ lib/util.c    2010-07-09 05:58:28 +0000 (26c3237)
@@ -30,19 +30,22 @@ grn_normalize_offset_and_limit(grn_ctx *ctx, int size, int *p_offset, int *p_lim
   if (offset < 0) {
     offset += size;
     if (offset < 0) {
-      ERR(GRN_INVALID_ARGUMENT, "too small offset");
-      goto exit;
+      *p_offset = 0;
+      *p_limit = 0;
+      return GRN_TOO_SMALL_OFFSET;
     }
   } else if (offset != 0 && offset >= size) {
-    ERR(GRN_INVALID_ARGUMENT, "too large offset");
-    goto exit;
+    *p_offset = 0;
+    *p_limit = 0;
+    return GRN_TOO_LARGE_OFFSET;
   }
 
   if (limit < 0) {
     limit += size + 1;
     if (limit < 0) {
-      ERR(GRN_INVALID_ARGUMENT, "too small limit");
-      goto exit;
+      *p_offset = 0;
+      *p_limit = 0;
+      return GRN_TOO_SMALL_LIMIT;
     }
   } else if (limit > size) {
     limit = size;
@@ -56,10 +59,6 @@ grn_normalize_offset_and_limit(grn_ctx *ctx, int size, int *p_offset, int *p_lim
   *p_offset = offset;
   *p_limit = limit;
   return GRN_SUCCESS;
-exit:
-  *p_offset = 0;
-  *p_limit = 0;
-  return ctx->rc;
 }
 
 static grn_rc




Groonga-commit メーリングリストの案内
Back to archive index