1/*-
2 * Copyright 2000 Hans Reiser
3 * See README for licensing and copyright details
4 *
5 * Ported to FreeBSD by Jean-S��bastien P��dron <jspedron@club-internet.fr>
6 *
7 * $FreeBSD: releng/10.2/sys/gnu/fs/reiserfs/reiserfs_item_ops.c 230132 2012-01-15 13:23:18Z uqs $
8 */
9
10#include <gnu/fs/reiserfs/reiserfs_fs.h>
11
12/* -------------------------------------------------------------------
13 * Stat data functions
14 * -------------------------------------------------------------------*/
15
16static int
17sd_bytes_number(struct item_head *ih, int block_size)
18{
19
20	return (0);
21}
22
23struct item_operations stat_data_ops = {
24	.bytes_number      = sd_bytes_number,
25	//.decrement_key     = sd_decrement_key,
26	//.is_left_mergeable = sd_is_left_mergeable,
27	//.print_item        = sd_print_item,
28	//.check_item        = sd_check_item,
29
30	//.create_vi         = sd_create_vi,
31	//.check_left        = sd_check_left,
32	//.check_right       = sd_check_right,
33	//.part_size         = sd_part_size,
34	//.unit_num          = sd_unit_num,
35	//.print_vi          = sd_print_vi
36};
37
38/* -------------------------------------------------------------------
39 * Direct item functions
40 * -------------------------------------------------------------------*/
41
42static int
43direct_bytes_number(struct item_head *ih, int block_size)
44{
45
46	return (ih_item_len(ih));
47}
48
49struct item_operations direct_ops = {
50	.bytes_number      = direct_bytes_number,
51	//.decrement_key     = direct_decrement_key,
52	//.is_left_mergeable = direct_is_left_mergeable,
53	//.print_item        = direct_print_item,
54	//.check_item        = direct_check_item,
55
56	//.create_vi         = direct_create_vi,
57	//.check_left        = direct_check_left,
58	//.check_right       = direct_check_right,
59	//.part_size         = direct_part_size,
60	//.unit_num          = direct_unit_num,
61	//.print_vi          = direct_print_vi
62};
63
64/* -------------------------------------------------------------------
65 * Indirect item functions
66 * -------------------------------------------------------------------*/
67
68static int
69indirect_bytes_number(struct item_head *ih, int block_size)
70{
71
72	return (ih_item_len(ih) / UNFM_P_SIZE * block_size);
73}
74
75struct item_operations indirect_ops = {
76	.bytes_number      = indirect_bytes_number,
77	//.decrement_key     = indirect_decrement_key,
78	//.is_left_mergeable = indirect_is_left_mergeable,
79	//.print_item        = indirect_print_item,
80	//.check_item        = indirect_check_item,
81
82	//.create_vi         = indirect_create_vi,
83	//.check_left        = indirect_check_left,
84	//.check_right       = indirect_check_right,
85	//.part_size         = indirect_part_size,
86	//.unit_num          = indirect_unit_num,
87	//.print_vi          = indirect_print_vi
88};
89
90/* -------------------------------------------------------------------
91 * Direntry functions
92 * -------------------------------------------------------------------*/
93
94static int
95direntry_bytes_number(struct item_head *ih, int block_size)
96{
97
98	reiserfs_log(LOG_WARNING, "bytes number is asked for direntry\n");
99	return (0);
100}
101
102struct item_operations direntry_ops = {
103	.bytes_number      = direntry_bytes_number,
104	//.decrement_key     = direntry_decrement_key,
105	//.is_left_mergeable = direntry_is_left_mergeable,
106	//.print_item        = direntry_print_item,
107	//.check_item        = direntry_check_item,
108
109	//.create_vi         = direntry_create_vi,
110	//.check_left        = direntry_check_left,
111	//.check_right       = direntry_check_right,
112	//.part_size         = direntry_part_size,
113	//.unit_num          = direntry_unit_num,
114	//.print_vi          = direntry_print_vi
115};
116
117/* -------------------------------------------------------------------
118 * Error catching functions to catch errors caused by incorrect item
119 * types.
120 * -------------------------------------------------------------------*/
121
122static int
123errcatch_bytes_number(struct item_head *ih, int block_size)
124{
125
126	reiserfs_log(LOG_WARNING, "invalid item type observed, run fsck ASAP");
127	return (0);
128}
129
130struct item_operations errcatch_ops = {
131	errcatch_bytes_number,
132	//errcatch_decrement_key,
133	//errcatch_is_left_mergeable,
134	//errcatch_print_item,
135	//errcatch_check_item,
136
137	//errcatch_create_vi,
138	//errcatch_check_left,
139	//errcatch_check_right,
140	//errcatch_part_size,
141	//errcatch_unit_num,
142	//errcatch_print_vi
143};
144
145#if !(TYPE_STAT_DATA == 0 && TYPE_INDIRECT == 1 &&			\
146    TYPE_DIRECT == 2 && TYPE_DIRENTRY == 3)
147#error
148#endif
149
150struct item_operations *item_ops[TYPE_ANY + 1] = {
151	&stat_data_ops,
152	&indirect_ops,
153	&direct_ops,
154	&direntry_ops,
155	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
156	&errcatch_ops /* This is to catch errors with invalid type (15th
157			 entry for TYPE_ANY) */
158};
159