File: sdext_lw.c

package info (click to toggle)
reiser4progs 1.0.6-1
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 5,348 kB
  • ctags: 3,714
  • sloc: ansic: 33,468; sh: 8,489; makefile: 1,012
file content (85 lines) | stat: -rw-r--r-- 2,032 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/* Copyright (C) 2001-2005 by Hans Reiser, licensing governed by
   reiser4progs/COPYING.
   
   sdext_lw.c -- light weight stat data extension plugin, that implements base
   stat data fields. */

#include "sdext_lw.h"
#include <aux/aux.h>

reiser4_core_t *sdext_lw_core = NULL;

/* Loads extension to passed @hint */
static errno_t sdext_lw_open(stat_entity_t *stat, void *hint) {
	sdext_lw_t *ext;
	sdhint_lw_t *lwh;
    
	aal_assert("umka-1188", stat != NULL);
	aal_assert("umka-1189", hint != NULL);

	ext = (sdext_lw_t *)stat_body(stat);
	lwh = (sdhint_lw_t *)hint;
    
	lwh->mode = sdext_lw_get_mode(ext);
	lwh->nlink = sdext_lw_get_nlink(ext);
	lwh->size = sdext_lw_get_size(ext);
    
	return 0;
}

static uint32_t sdext_lw_length(stat_entity_t *stat, void *hint) {
	return sizeof(sdext_lw_t);
}

static void sdext_lw_info(stat_entity_t *stat) {
	sdext_lw_t *ext;
	ext = (sdext_lw_t *)stat_body(stat);
	stat->info.mode = sdext_lw_get_mode(ext);
}

#ifndef ENABLE_MINIMAL
/* Saves all extension fields from passed @hint to @body. */
static errno_t sdext_lw_init(stat_entity_t *stat, void *hint) {
	sdhint_lw_t *lwh;
	sdext_lw_t *ext;
	
	aal_assert("umka-1186", stat != NULL);
	aal_assert("umka-1187", hint != NULL);
	
	lwh = (sdhint_lw_t *)hint;
	ext = (sdext_lw_t *)stat_body(stat);
	
	sdext_lw_set_mode(ext, lwh->mode);
	sdext_lw_set_nlink(ext, lwh->nlink);
	sdext_lw_set_size(ext, lwh->size);

	return 0;
}

extern errno_t sdext_lw_check_struct(stat_entity_t *stat, 
				     repair_hint_t *hint);

extern void sdext_lw_print(stat_entity_t *stat, 
			   aal_stream_t *stream, 
			   uint16_t options);

#endif

reiser4_sdext_plug_t sdext_lw_plug = {
	.p = {
		.id    = {SDEXT_LW_ID, 0, SDEXT_PLUG_TYPE},
#ifndef ENABLE_MINIMAL
		.label = "sdext_lw",
		.desc  = "Light stat data extension plugin.",
#endif
	},

#ifndef ENABLE_MINIMAL
	.init	 	= sdext_lw_init,
	.print   	= sdext_lw_print,
	.check_struct   = sdext_lw_check_struct,
#endif
	.open	 	= sdext_lw_open,
	.info		= sdext_lw_info,
	.length	 	= sdext_lw_length
};