projects
/
paraslash.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix compilation on NetBSD.
[paraslash.git]
/
osl.c
diff --git
a/osl.c
b/osl.c
index
6294fbb
..
9843a02
100644
(file)
--- a/
osl.c
+++ b/
osl.c
@@
-994,8
+994,14
@@
static void free_volatile_objects(const struct osl_table *t,
for (n = rb_first(&rb_col->rbtree); n; n = rb_next(n)) {
struct osl_row *r = get_row_pointer(n, rb_col->rbtree_num);
if (flags & OSL_FREE_VOLATILE)
for (n = rb_first(&rb_col->rbtree); n; n = rb_next(n)) {
struct osl_row *r = get_row_pointer(n, rb_col->rbtree_num);
if (flags & OSL_FREE_VOLATILE)
- for (j = 0; j < t->num_volatile_columns; j++)
- free(r->volatile_objects[j].data);
+ FOR_EACH_VOLATILE_COLUMN(j, t, cd) {
+ if (cd->storage_flags & OSL_DONT_FREE)
+ continue;
+ free(r->volatile_objects[
+ t->columns[j].volatile_num].data);
+ }
+// for (j = 0; j < t->num_volatile_columns; j++)
+// free(r->volatile_objects[j].data);
free(r->volatile_objects);
}
}
free(r->volatile_objects);
}
}
@@
-1569,7
+1575,7
@@
int osl_del_row(struct osl_table *t, struct osl_row *row)
mark_mapped_object_invalid(t, r->num, i);
continue;
}
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) {
free(r->volatile_objects[col->volatile_num].data);
}
if (t->num_mapped_columns) {
@@
-2007,8
+2013,17
@@
int osl_get_nth_row(const struct osl_table *t, unsigned col_num,
{
struct osl_column *col;
struct rb_node *node;
{
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);
if (ret < 0)
return ret;
node = rb_nth(col->rbtree.rb_node, n);