@@ -21,13 +21,17 @@ struct dir_info_db {
21
21
int size ;
22
22
struct dir_info * array ;
23
23
struct dir_info * last_lookup ;
24
+ #ifdef CONFIG_TDB
24
25
char * tdb_fn ;
25
26
TDB_CONTEXT * tdb ;
27
+ #endif
26
28
};
27
29
28
30
struct dir_info_iter {
29
31
int i ;
32
+ #ifdef CONFIG_TDB
30
33
TDB_DATA tdb_iter ;
34
+ #endif
31
35
};
32
36
33
37
struct dir_info_ent {
@@ -38,6 +42,7 @@ struct dir_info_ent {
38
42
39
43
static void e2fsck_put_dir_info (e2fsck_t ctx , struct dir_info * dir );
40
44
45
+ #ifdef CONFIG_TDB
41
46
static void setup_tdb (e2fsck_t ctx , ext2_ino_t num_dirs )
42
47
{
43
48
struct dir_info_db * db = ctx -> dir_info ;
@@ -79,6 +84,7 @@ static void setup_tdb(e2fsck_t ctx, ext2_ino_t num_dirs)
79
84
O_RDWR | O_CREAT | O_TRUNC , 0600 );
80
85
close (fd );
81
86
}
87
+ #endif
82
88
83
89
static void setup_db (e2fsck_t ctx )
84
90
{
@@ -98,6 +104,7 @@ static void setup_db(e2fsck_t ctx)
98
104
if (retval )
99
105
num_dirs = 1024 ; /* Guess */
100
106
107
+ #ifdef CONFIG_TDB
101
108
setup_tdb (ctx , num_dirs );
102
109
103
110
if (db -> tdb ) {
@@ -106,6 +113,7 @@ static void setup_db(e2fsck_t ctx)
106
113
#endif
107
114
return ;
108
115
}
116
+ #endif
109
117
110
118
db -> size = num_dirs + 10 ;
111
119
db -> array = (struct dir_info * )
@@ -121,8 +129,7 @@ static void setup_db(e2fsck_t ctx)
121
129
*/
122
130
void e2fsck_add_dir_info (e2fsck_t ctx , ext2_ino_t ino , ext2_ino_t parent )
123
131
{
124
- struct dir_info_db * db ;
125
- struct dir_info * dir , ent , * old_array ;
132
+ struct dir_info * dir , * old_array ;
126
133
int i , j ;
127
134
errcode_t retval ;
128
135
unsigned long old_size ;
@@ -132,7 +139,6 @@ void e2fsck_add_dir_info(e2fsck_t ctx, ext2_ino_t ino, ext2_ino_t parent)
132
139
#endif
133
140
if (!ctx -> dir_info )
134
141
setup_db (ctx );
135
- db = ctx -> dir_info ;
136
142
137
143
if (ctx -> dir_info -> count >= ctx -> dir_info -> size ) {
138
144
old_size = ctx -> dir_info -> size * sizeof (struct dir_info );
@@ -153,14 +159,17 @@ void e2fsck_add_dir_info(e2fsck_t ctx, ext2_ino_t ino, ext2_ino_t parent)
153
159
ctx -> dir_info -> last_lookup = NULL ;
154
160
}
155
161
156
- ent . ino = ino ;
157
- ent . parent = parent ;
158
- ent . dotdot = parent ;
162
+ #ifdef CONFIG_TDB
163
+ if ( ctx -> dir_info -> tdb ) {
164
+ struct dir_info ent ;
159
165
160
- if (db -> tdb ) {
166
+ ent .ino = ino ;
167
+ ent .parent = parent ;
168
+ ent .dotdot = parent ;
161
169
e2fsck_put_dir_info (ctx , & ent );
162
170
return ;
163
171
}
172
+ #endif
164
173
165
174
/*
166
175
* Normally, add_dir_info is called with each inode in
@@ -196,8 +205,6 @@ static struct dir_info *e2fsck_get_dir_info(e2fsck_t ctx, ext2_ino_t ino)
196
205
{
197
206
struct dir_info_db * db = ctx -> dir_info ;
198
207
int low , high , mid ;
199
- struct dir_info_ent * buf ;
200
- static struct dir_info ret_dir_info ;
201
208
202
209
if (!db )
203
210
return 0 ;
@@ -206,8 +213,11 @@ static struct dir_info *e2fsck_get_dir_info(e2fsck_t ctx, ext2_ino_t ino)
206
213
printf ("e2fsck_get_dir_info %d..." , ino );
207
214
#endif
208
215
216
+ #ifdef CONFIG_TDB
209
217
if (db -> tdb ) {
218
+ static struct dir_info ret_dir_info ;
210
219
TDB_DATA key , data ;
220
+ struct dir_info_ent * buf ;
211
221
212
222
key .dptr = (unsigned char * ) & ino ;
213
223
key .dsize = sizeof (ext2_ino_t );
@@ -230,6 +240,7 @@ static struct dir_info *e2fsck_get_dir_info(e2fsck_t ctx, ext2_ino_t ino)
230
240
free (data .dptr );
231
241
return & ret_dir_info ;
232
242
}
243
+ #endif
233
244
234
245
if (db -> last_lookup && db -> last_lookup -> ino == ino )
235
246
return db -> last_lookup ;
@@ -273,17 +284,21 @@ static struct dir_info *e2fsck_get_dir_info(e2fsck_t ctx, ext2_ino_t ino)
273
284
return 0 ;
274
285
}
275
286
276
- static void e2fsck_put_dir_info (e2fsck_t ctx , struct dir_info * dir )
287
+ static void e2fsck_put_dir_info (e2fsck_t ctx EXT2FS_NO_TDB_UNUSED ,
288
+ struct dir_info * dir EXT2FS_NO_TDB_UNUSED )
277
289
{
290
+ #ifdef CONFIG_TDB
278
291
struct dir_info_db * db = ctx -> dir_info ;
279
292
struct dir_info_ent buf ;
280
293
TDB_DATA key , data ;
294
+ #endif
281
295
282
296
#ifdef DIRINFO_DEBUG
283
297
printf ("e2fsck_put_dir_info (%d, %d, %d)..." , dir -> ino , dir -> dotdot ,
284
298
dir -> parent );
285
299
#endif
286
300
301
+ #ifdef CONFIG_TDB
287
302
if (!db -> tdb )
288
303
return ;
289
304
@@ -298,7 +313,7 @@ static void e2fsck_put_dir_info(e2fsck_t ctx, struct dir_info *dir)
298
313
if (tdb_store (db -> tdb , key , data , TDB_REPLACE ) == -1 ) {
299
314
printf ("store failed: %s\n" , tdb_errorstr (db -> tdb ));
300
315
}
301
- return ;
316
+ #endif
302
317
}
303
318
304
319
/*
@@ -307,12 +322,14 @@ static void e2fsck_put_dir_info(e2fsck_t ctx, struct dir_info *dir)
307
322
void e2fsck_free_dir_info (e2fsck_t ctx )
308
323
{
309
324
if (ctx -> dir_info ) {
325
+ #ifdef CONFIG_TDB
310
326
if (ctx -> dir_info -> tdb )
311
327
tdb_close (ctx -> dir_info -> tdb );
312
328
if (ctx -> dir_info -> tdb_fn ) {
313
329
unlink (ctx -> dir_info -> tdb_fn );
314
330
free (ctx -> dir_info -> tdb_fn );
315
331
}
332
+ #endif
316
333
if (ctx -> dir_info -> array )
317
334
ext2fs_free_mem (& ctx -> dir_info -> array );
318
335
ctx -> dir_info -> array = 0 ;
@@ -334,21 +351,24 @@ int e2fsck_get_num_dirinfo(e2fsck_t ctx)
334
351
struct dir_info_iter * e2fsck_dir_info_iter_begin (e2fsck_t ctx )
335
352
{
336
353
struct dir_info_iter * iter ;
337
- struct dir_info_db * db = ctx -> dir_info ;
338
354
339
355
iter = e2fsck_allocate_memory (ctx , sizeof (struct dir_info_iter ),
340
356
"dir_info iterator" );
341
357
342
- if (db -> tdb )
343
- iter -> tdb_iter = tdb_firstkey (db -> tdb );
358
+ #ifdef CONFIG_TDB
359
+ if (ctx -> dir_info -> tdb )
360
+ iter -> tdb_iter = tdb_firstkey (ctx -> dir_info -> tdb );
361
+ #endif
344
362
345
363
return iter ;
346
364
}
347
365
348
366
void e2fsck_dir_info_iter_end (e2fsck_t ctx EXT2FS_ATTR ((unused )),
349
367
struct dir_info_iter * iter )
350
368
{
369
+ #ifdef CONFIG_TDB
351
370
free (iter -> tdb_iter .dptr );
371
+ #endif
352
372
ext2fs_free_mem (& iter );
353
373
}
354
374
@@ -357,33 +377,34 @@ void e2fsck_dir_info_iter_end(e2fsck_t ctx EXT2FS_ATTR((unused)),
357
377
*/
358
378
struct dir_info * e2fsck_dir_info_iter (e2fsck_t ctx , struct dir_info_iter * iter )
359
379
{
360
- TDB_DATA data , key ;
361
- struct dir_info_db * db = ctx -> dir_info ;
362
- struct dir_info_ent * buf ;
363
- static struct dir_info ret_dir_info ;
364
-
365
380
if (!ctx -> dir_info || !iter )
366
381
return 0 ;
367
382
368
- if (db -> tdb ) {
383
+ #ifdef CONFIG_TDB
384
+ if (ctx -> dir_info -> tdb ) {
385
+ static struct dir_info ret_dir_info ;
386
+ struct dir_info_ent * buf ;
387
+ TDB_DATA data , key ;
388
+
369
389
if (iter -> tdb_iter .dptr == 0 )
370
390
return 0 ;
371
391
key = iter -> tdb_iter ;
372
- data = tdb_fetch (db -> tdb , key );
392
+ data = tdb_fetch (ctx -> dir_info -> tdb , key );
373
393
if (!data .dptr ) {
374
394
printf ("iter fetch failed: %s\n" ,
375
- tdb_errorstr (db -> tdb ));
395
+ tdb_errorstr (ctx -> dir_info -> tdb ));
376
396
return 0 ;
377
397
}
378
398
buf = (struct dir_info_ent * ) data .dptr ;
379
399
ret_dir_info .ino = * ((ext2_ino_t * ) iter -> tdb_iter .dptr );
380
400
ret_dir_info .dotdot = buf -> dotdot ;
381
401
ret_dir_info .parent = buf -> parent ;
382
- iter -> tdb_iter = tdb_nextkey (db -> tdb , key );
402
+ iter -> tdb_iter = tdb_nextkey (ctx -> dir_info -> tdb , key );
383
403
free (key .dptr );
384
404
free (data .dptr );
385
405
return & ret_dir_info ;
386
406
}
407
+ #endif
387
408
388
409
if (iter -> i >= ctx -> dir_info -> count )
389
410
return 0 ;
0 commit comments