X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=osl.c;h=9843a02034fc8927bdcce36be4bc6f7959d6f88d;hp=7b4f91f59470089182b21b62d57a0bad5e324e54;hb=dbc0f1fba57b6de0f6bb4d7ac40167a1047ea3cd;hpb=d237ec8d2fc5a697f4fa36832cfd6a037a8db7e6 diff --git a/osl.c b/osl.c index 7b4f91f5..9843a020 100644 --- a/osl.c +++ b/osl.c @@ -1575,7 +1575,7 @@ int osl_del_row(struct osl_table *t, struct osl_row *row) mark_mapped_object_invalid(t, r->num, i); continue; } - if (st == OSL_NO_STORAGE) + if (st == OSL_NO_STORAGE && !(cd->storage_flags & OSL_DONT_FREE)) free(r->volatile_objects[col->volatile_num].data); } if (t->num_mapped_columns) { @@ -2013,8 +2013,17 @@ int osl_get_nth_row(const struct osl_table *t, unsigned col_num, { struct osl_column *col; struct rb_node *node; - int ret = check_rbtree_col(t, col_num, &col); + unsigned num_rows; + int ret; + if (n == 0) + return -E_RB_KEY_NOT_FOUND; + ret = osl_get_num_rows(t, &num_rows); + if (ret < 0) + return ret; + if (n > num_rows) + return -E_RB_KEY_NOT_FOUND; + ret = check_rbtree_col(t, col_num, &col); if (ret < 0) return ret; node = rb_nth(col->rbtree.rb_node, n);