* Licensed under the GNU GPL. See the file COPYING for details.
*
* 2002-02-05: Sergey S. Kostyliov added binary search within
- * btree nodes.
+ * btree nodes.
*
* Many thanks to:
*
static const befs_off_t BEFS_BT_INVAL = 0xffffffffffffffffULL;
/* local functions */
-static int befs_btree_seekleaf(struct super_block *sb, const befs_data_stream *ds,
- befs_btree_super * bt_super,
+static int befs_btree_seekleaf(struct super_block *sb,
+ const befs_data_stream *ds,
+ befs_btree_super *bt_super,
struct befs_btree_node *this_node,
- befs_off_t * node_off);
+ befs_off_t *node_off);
-static int befs_bt_read_super(struct super_block *sb, const befs_data_stream *ds,
- befs_btree_super * sup);
+static int befs_bt_read_super(struct super_block *sb,
+ const befs_data_stream *ds,
+ befs_btree_super *sup);
static int befs_bt_read_node(struct super_block *sb, const befs_data_stream *ds,
struct befs_btree_node *node,
static int befs_find_key(struct super_block *sb,
struct befs_btree_node *node,
- const char *findkey, befs_off_t * value);
+ const char *findkey, befs_off_t *value);
static char *befs_bt_get_key(struct super_block *sb,
struct befs_btree_node *node,
- int index, u16 * keylen);
+ int index, u16 *keylen);
static int befs_compare_strings(const void *key1, int keylen1,
const void *key2, int keylen2);
*/
static int
befs_bt_read_super(struct super_block *sb, const befs_data_stream *ds,
- befs_btree_super * sup)
+ befs_btree_super *sup)
{
struct buffer_head *bh;
befs_disk_btree_super *od_sup;
befs_debug(sb, "<--- %s", __func__);
return BEFS_OK;
- error:
+error:
befs_debug(sb, "<--- %s ERROR", __func__);
return BEFS_ERR;
}
node->bh = befs_read_datastream(sb, ds, node_off, &off);
if (!node->bh) {
- befs_error(sb, "%s failed to read "
- "node at %llu", __func__, node_off);
+ befs_error(sb, "%s failed to read node at %llu",
+ __func__, node_off);
befs_debug(sb, "<--- %s ERROR", __func__);
return BEFS_ERR;
*/
int
befs_btree_find(struct super_block *sb, const befs_data_stream *ds,
- const char *key, befs_off_t * value)
+ const char *key, befs_off_t *value)
{
struct befs_btree_node *this_node;
befs_btree_super bt_super;
befs_debug(sb, "---> %s Key: %s", __func__, key);
if (befs_bt_read_super(sb, ds, &bt_super) != BEFS_OK) {
- befs_error(sb,
- "befs_btree_find() failed to read index superblock");
+ befs_error(sb, "%s() failed to read index superblock",
+ __func__);
goto error;
}
this_node = kmalloc(sizeof(struct befs_btree_node),
GFP_NOFS);
if (!this_node) {
- befs_error(sb, "befs_btree_find() failed to allocate %zu "
- "bytes of memory", sizeof(struct befs_btree_node));
+ befs_error(sb, "%s() failed to allocate %zu bytes of memory",
+ __func__, sizeof(struct befs_btree_node));
goto error;
}
/* read in root node */
node_off = bt_super.root_node_ptr;
if (befs_bt_read_node(sb, ds, this_node, node_off) != BEFS_OK) {
- befs_error(sb, "befs_btree_find() failed to read "
- "node at %llu", node_off);
+ befs_error(sb, "%s() failed to read node at %llu",
+ __func__, node_off);
goto error_alloc;
}
if (res == BEFS_BT_OVERFLOW)
node_off = this_node->head.overflow;
if (befs_bt_read_node(sb, ds, this_node, node_off) != BEFS_OK) {
- befs_error(sb, "befs_btree_find() failed to read "
- "node at %llu", node_off);
+ befs_error(sb, "%s() failed to read node at %llu",
+ __func__, node_off);
goto error_alloc;
}
}
key, *value);
return BEFS_OK;
- error_alloc:
+error_alloc:
kfree(this_node);
- error:
+error:
*value = 0;
befs_debug(sb, "<--- %s ERROR", __func__);
return BEFS_ERR;
*/
static int
befs_find_key(struct super_block *sb, struct befs_btree_node *node,
- const char *findkey, befs_off_t * value)
+ const char *findkey, befs_off_t *value)
{
int first, last, mid;
int eq;
*/
int
befs_btree_read(struct super_block *sb, const befs_data_stream *ds,
- loff_t key_no, size_t bufsize, char *keybuf, size_t * keysize,
- befs_off_t * value)
+ loff_t key_no, size_t bufsize, char *keybuf, size_t *keysize,
+ befs_off_t *value)
{
struct befs_btree_node *this_node;
befs_btree_super bt_super;
befs_debug(sb, "---> %s", __func__);
if (befs_bt_read_super(sb, ds, &bt_super) != BEFS_OK) {
- befs_error(sb,
- "befs_btree_read() failed to read index superblock");
+ befs_error(sb, "%s() failed to read index superblock",
+ __func__);
goto error;
}
this_node = kmalloc(sizeof(struct befs_btree_node), GFP_NOFS);
if (this_node == NULL) {
- befs_error(sb, "befs_btree_read() failed to allocate %zu "
- "bytes of memory", sizeof(struct befs_btree_node));
+ befs_error(sb, "%s() failed to allocate %zu bytes of memory",
+ __func__, sizeof(struct befs_btree_node));
goto error;
}
keystart = befs_bt_get_key(sb, this_node, cur_key, &keylen);
befs_debug(sb, "Read [%llu,%d]: keysize %d",
- (long long unsigned int)node_off, (int)cur_key,
+ (unsigned long long int)node_off, (int)cur_key,
(int)keylen);
if (bufsize < keylen + 1) {
- befs_error(sb, "%s keybuf too small (%zu) "
- "for key of size %d", __func__, bufsize, keylen);
+ befs_error(sb, "%s keybuf too small (%zu) for key of size %d",
+ __func__, bufsize, keylen);
brelse(this_node->bh);
goto error_alloc;
}
return BEFS_OK;
- error_alloc:
+error_alloc:
kfree(this_node);
- error:
+error:
*keysize = 0;
*value = 0;
befs_debug(sb, "<--- %s ERROR", __func__);
* @bt_super: Pointer to the superblock of the btree
* @this_node: Buffer to return the leafnode in
* @node_off: Pointer to offset of current node within datastream. Modified
- * by the function.
+ * by the function.
*
* Helper function for btree traverse. Moves the current position to the
* start of the first leaf node.
befs_btree_seekleaf(struct super_block *sb, const befs_data_stream *ds,
befs_btree_super *bt_super,
struct befs_btree_node *this_node,
- befs_off_t * node_off)
+ befs_off_t *node_off)
{
befs_debug(sb, "---> %s", __func__);
if (befs_bt_read_node(sb, ds, this_node, *node_off) != BEFS_OK) {
- befs_error(sb, "%s failed to read "
- "node at %llu", __func__, *node_off);
+ befs_error(sb, "%s failed to read node at %llu",
+ __func__, *node_off);
goto error;
}
befs_debug(sb, "Seekleaf to root node %llu", *node_off);
*node_off = fs64_to_cpu(sb, valarray[0]);
}
if (befs_bt_read_node(sb, ds, this_node, *node_off) != BEFS_OK) {
- befs_error(sb, "%s failed to read "
- "node at %llu", __func__, *node_off);
+ befs_error(sb, "%s failed to read node at %llu",
+ __func__, *node_off);
goto error;
}
return BEFS_OK;
- error:
+error:
befs_debug(sb, "<--- %s ERROR", __func__);
return BEFS_ERR;
}
{
const int keylen_align = 8;
unsigned long int off =
- (sizeof (befs_btree_nodehead) + node->head.all_key_length);
+ (sizeof(befs_btree_nodehead) + node->head.all_key_length);
ulong tmp = off % keylen_align;
if (tmp)
befs_bt_valarray(struct befs_btree_node *node)
{
void *keylen_index_start = (void *) befs_bt_keylen_index(node);
- size_t keylen_index_size = node->head.all_key_count * sizeof (fs16);
+ size_t keylen_index_size = node->head.all_key_count * sizeof(fs16);
return (fs64 *) (keylen_index_start + keylen_index_size);
}
static char *
befs_bt_keydata(struct befs_btree_node *node)
{
- return (char *) ((void *) node->od_node + sizeof (befs_btree_nodehead));
+ return (char *) ((void *) node->od_node + sizeof(befs_btree_nodehead));
}
/**
*/
static char *
befs_bt_get_key(struct super_block *sb, struct befs_btree_node *node,
- int index, u16 * keylen)
+ int index, u16 *keylen)
{
int prev_key_end;
char *keystart;
{
int len = min_t(int, keylen1, keylen2);
int result = strncmp(key1, key2, len);
+
if (result == 0)
result = keylen1 - keylen2;
return result;
btree_compare_float(cont void *key1, int keylen1, const void *key2, int keylen2)
{
float result = *(float *) key1 - *(float *) key2;
+
if (result == 0.0f)
return 0;
const void *key2, int keylen2)
{
double result = *(double *) key1 - *(double *) key2;
+
if (result == 0.0)
return 0;