1 |
|
2 #include "../lib/log.h" |
|
3 |
|
4 #include "dbfs.h" |
|
5 |
|
6 void dbfs_rename_res (const struct evsql_result_info *res, void *arg) { |
|
7 struct fuse_req *req = arg; |
|
8 int err; |
|
9 |
|
10 // check the results |
|
11 if ((err = _dbfs_check_res(res, 0, 0))) |
|
12 SERROR(err = (err == 1 ? ENOENT : EIO)); |
|
13 |
|
14 // just reply |
|
15 if ((err = -fuse_reply_err(req, 0))) |
|
16 EERROR(err, "fuse_reply_err"); |
|
17 |
|
18 // log |
|
19 INFO("[dbfs.rename %p] -> OK", req); |
|
20 |
|
21 // fallthrough for result_free |
|
22 err = 0; |
|
23 |
|
24 error: |
|
25 if (err && (err = -fuse_reply_err(req, err))) |
|
26 EWARNING(err, "fuse_reply_err"); |
|
27 |
|
28 evsql_result_free(res); |
|
29 } |
|
30 |
|
31 void dbfs_rename (struct fuse_req *req, fuse_ino_t parent, const char *name, fuse_ino_t newparent, const char *newname) { |
|
32 struct dbfs *dbfs_ctx = fuse_req_userdata(req); |
|
33 int err; |
|
34 |
|
35 INFO("[dbfs.rename %p] parent=%lu, name=%s, newparent=%lu, newname=%s", req, parent, name, newparent, newname); |
|
36 |
|
37 // just one UPDATE |
|
38 const char *sql = |
|
39 "UPDATE" |
|
40 " file_tree" |
|
41 " SET parent = $1::int4, name = $2::varchar" |
|
42 " WHERE parent = $3::int4 AND name = $4::varchar"; |
|
43 |
|
44 static struct evsql_query_params params = EVSQL_PARAMS(EVSQL_FMT_BINARY) { |
|
45 EVSQL_PARAM ( UINT32 ), |
|
46 EVSQL_PARAM ( STRING ), |
|
47 EVSQL_PARAM ( UINT32 ), |
|
48 EVSQL_PARAM ( STRING ), |
|
49 |
|
50 EVSQL_PARAMS_END |
|
51 }; |
|
52 |
|
53 if (0 |
|
54 || evsql_param_uint32(¶ms, 0, newparent) |
|
55 || evsql_param_string(¶ms, 1, newname) |
|
56 || evsql_param_uint32(¶ms, 2, parent) |
|
57 || evsql_param_string(¶ms, 3, name) |
|
58 ) |
|
59 SERROR(err = EIO); |
|
60 |
|
61 // query |
|
62 if (evsql_query_params(dbfs_ctx->db, NULL, sql, ¶ms, dbfs_rename_res, req) == NULL) |
|
63 SERROR(err = EIO); |
|
64 |
|
65 // good, wait |
|
66 return; |
|
67 |
|
68 error: |
|
69 if ((err = fuse_reply_err(req, err))) |
|
70 EWARNING(err, "fuse_reply_err"); |
|
71 } |
|