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
|
#include <tcl.h>
#ifdef HAVE_STDLIB_H
# include <stdlib.h>
#endif
typedef struct kitdll_data *(cmd_getData_t)(const char *, unsigned long);
typedef unsigned long (cmd_getChildren_t)(const char *, unsigned long *, unsigned long);
/* Your implementation must provide these */
static cmd_getData_t *getCmdData(const char *hashkey);
static cmd_getChildren_t *getCmdChildren(const char *hashkey);
/* Tcl Commands */
static int getMetadata(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
cmd_getData_t *cmd_getData;
cmd_getChildren_t *cmd_getChildren;
struct kitdll_data *finfo = NULL;
Tcl_Obj *ret_list, *ret_list_items[20];
unsigned long num_children;
const char *hashkey;
const char *file;
if (objc != 3) {
Tcl_SetResult(interp, "wrong # args: should be \"getMetadata hashKey fileName\"", TCL_STATIC);
|
|
|
|
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
|
#include <tcl.h>
#ifdef HAVE_STDLIB_H
# include <stdlib.h>
#endif
typedef struct cvfs_data *(cmd_getData_t)(const char *, unsigned long);
typedef unsigned long (cmd_getChildren_t)(const char *, unsigned long *, unsigned long);
/* Your implementation must provide these */
static cmd_getData_t *getCmdData(const char *hashkey);
static cmd_getChildren_t *getCmdChildren(const char *hashkey);
/* Tcl Commands */
static int getMetadata(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
cmd_getData_t *cmd_getData;
cmd_getChildren_t *cmd_getChildren;
struct cvfs_data *finfo = NULL;
Tcl_Obj *ret_list, *ret_list_items[20];
unsigned long num_children;
const char *hashkey;
const char *file;
if (objc != 3) {
Tcl_SetResult(interp, "wrong # args: should be \"getMetadata hashKey fileName\"", TCL_STATIC);
|
︙ | | | ︙ | |
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
}
/* Values that can be derived from "finfo" */
ret_list_items[0] = Tcl_NewStringObj("type", 4);
ret_list_items[2] = Tcl_NewStringObj("mode", 4);
ret_list_items[4] = Tcl_NewStringObj("nlink", 5);
if (finfo->type == KITDLL_FILETYPE_DIR) {
num_children = cmd_getChildren(file, NULL, 0);
ret_list_items[1] = Tcl_NewStringObj("directory", 9);
ret_list_items[3] = Tcl_NewLongObj(040555);
ret_list_items[5] = Tcl_NewLongObj(num_children);
} else {
ret_list_items[1] = Tcl_NewStringObj("file", 4);
|
|
|
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
}
/* Values that can be derived from "finfo" */
ret_list_items[0] = Tcl_NewStringObj("type", 4);
ret_list_items[2] = Tcl_NewStringObj("mode", 4);
ret_list_items[4] = Tcl_NewStringObj("nlink", 5);
if (finfo->type == CVFS_FILETYPE_DIR) {
num_children = cmd_getChildren(file, NULL, 0);
ret_list_items[1] = Tcl_NewStringObj("directory", 9);
ret_list_items[3] = Tcl_NewLongObj(040555);
ret_list_items[5] = Tcl_NewLongObj(num_children);
} else {
ret_list_items[1] = Tcl_NewStringObj("file", 4);
|
︙ | | | ︙ | |
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
Tcl_SetObjResult(interp, ret_list);
return(TCL_OK);
}
static int getData(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
struct kitdll_data *finfo = NULL;
cmd_getData_t *cmd_getData;
const char *hashkey;
const char *file;
const char *end_str;
Tcl_Obj *ret_str;
long start = 0;
long end = -1;
|
|
|
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
Tcl_SetObjResult(interp, ret_list);
return(TCL_OK);
}
static int getData(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
struct cvfs_data *finfo = NULL;
cmd_getData_t *cmd_getData;
const char *hashkey;
const char *file;
const char *end_str;
Tcl_Obj *ret_str;
long start = 0;
long end = -1;
|
︙ | | | ︙ | |
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
if (finfo == NULL) {
Tcl_SetResult(interp, "No such file or directory", TCL_STATIC);
return(TCL_ERROR);
}
if (finfo->type != KITDLL_FILETYPE_FILE) {
Tcl_SetResult(interp, "Not a file", TCL_STATIC);
return(TCL_ERROR);
}
if (end == -1) {
end = finfo->size;
|
|
|
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
if (finfo == NULL) {
Tcl_SetResult(interp, "No such file or directory", TCL_STATIC);
return(TCL_ERROR);
}
if (finfo->type != CVFS_FILETYPE_FILE) {
Tcl_SetResult(interp, "Not a file", TCL_STATIC);
return(TCL_ERROR);
}
if (end == -1) {
end = finfo->size;
|
︙ | | | ︙ | |
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
|
Tcl_SetObjResult(interp, ret_str);
return(TCL_OK);
}
static int getChildren(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
struct kitdll_data *finfo = NULL;
cmd_getChildren_t *cmd_getChildren;
cmd_getData_t *cmd_getData;
unsigned long num_children, idx;
unsigned long *children;
const char *hashkey;
const char *file;
const char *child;
|
|
|
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
|
Tcl_SetObjResult(interp, ret_str);
return(TCL_OK);
}
static int getChildren(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
struct cvfs_data *finfo = NULL;
cmd_getChildren_t *cmd_getChildren;
cmd_getData_t *cmd_getData;
unsigned long num_children, idx;
unsigned long *children;
const char *hashkey;
const char *file;
const char *child;
|
︙ | | | ︙ | |
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
|
if (finfo == NULL) {
Tcl_SetResult(interp, "No such file or directory", TCL_STATIC);
return(TCL_ERROR);
}
if (finfo->type != KITDLL_FILETYPE_DIR) {
Tcl_SetResult(interp, "Not a directory", TCL_STATIC);
return(TCL_ERROR);
}
num_children = cmd_getChildren(file, NULL, 0);
|
|
|
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
|
if (finfo == NULL) {
Tcl_SetResult(interp, "No such file or directory", TCL_STATIC);
return(TCL_ERROR);
}
if (finfo->type != CVFS_FILETYPE_DIR) {
Tcl_SetResult(interp, "Not a directory", TCL_STATIC);
return(TCL_ERROR);
}
num_children = cmd_getChildren(file, NULL, 0);
|
︙ | | | ︙ | |