1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
+
+
|
#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);
typedef void (cmd_decryptFile_t)(const char *, struct cvfs_data *);
/* Your implementation must provide these */
static cmd_getData_t *getCmdData(const char *hashkey);
static cmd_getChildren_t *getCmdChildren(const char *hashkey);
static cmd_decryptFile_t *getCmdDecryptFile(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];
|
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
+
|
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;
cmd_decryptFile_t *cmd_decryptFile;
const char *hashkey;
const char *file;
const char *end_str;
Tcl_Obj *ret_str;
long start = 0;
long end = -1;
int tclGetLFO_ret;
|
158
159
160
161
162
163
164
165
166
167
168
169
170
171
|
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
|
+
+
+
+
+
+
+
+
|
finfo = cmd_getData(file, 0);
if (finfo == NULL) {
Tcl_SetResult(interp, "No such file or directory", TCL_STATIC);
return(TCL_ERROR);
}
if (finfo->type == CVFS_FILETYPE_OBSFUCATED_FILE || finfo->type == CVFS_FILETYPE_ENCRYPTED_FILE) {
cmd_decryptFile = getCmdDecryptFile(hashkey);
if (cmd_decryptFile != NULL) {
cmd_decryptFile(file, finfo);
}
}
if (finfo->type != CVFS_FILETYPE_FILE) {
Tcl_SetResult(interp, "Not a file", TCL_STATIC);
return(TCL_ERROR);
}
|