|
1 |
|
2 #include <string.h> |
|
3 |
|
4 #include "common.h" |
|
5 |
|
6 mode_t _dbfs_mode (const char *type) { |
|
7 if (!strcmp(type, "DIR")) |
|
8 return S_IFDIR; |
|
9 |
|
10 if (!strcmp(type, "REG")) |
|
11 return S_IFREG; |
|
12 |
|
13 else { |
|
14 WARNING("[dbfs] weird mode-type: %s", type); |
|
15 return 0; |
|
16 } |
|
17 } |
|
18 |
|
19 int _dbfs_check_res (const struct evsql_result_info *res, size_t rows, size_t cols) { |
|
20 int err = 0; |
|
21 |
|
22 // check if it failed |
|
23 if (res->error) |
|
24 NERROR(evsql_result_error(res)); |
|
25 |
|
26 // not found? |
|
27 if (evsql_result_rows(res) == 0) |
|
28 SERROR(err = 1); |
|
29 |
|
30 // duplicate rows? |
|
31 if (rows && evsql_result_rows(res) != rows) |
|
32 ERROR("wrong number of rows returned"); |
|
33 |
|
34 // correct number of columns |
|
35 if (evsql_result_cols(res) != cols) |
|
36 ERROR("wrong number of columns: %zu", evsql_result_cols(res)); |
|
37 |
|
38 // good |
|
39 return 0; |
|
40 |
|
41 error: |
|
42 if (!err) |
|
43 err = -1; |
|
44 |
|
45 return err; |
|
46 } |
|
47 |
|
48 int _dbfs_stat_info (struct stat *st, const struct evsql_result_info *res, size_t row, size_t col_offset) { |
|
49 int err = 0; |
|
50 |
|
51 uint16_t mode; |
|
52 uint64_t size, nlink; |
|
53 const char *type; |
|
54 |
|
55 // extract the data |
|
56 if (0 |
|
57 || evsql_result_string(res, row, col_offset + 0, &type, 0 ) // inodes.type |
|
58 || evsql_result_uint16(res, row, col_offset + 1, &mode, 0 ) // inodes.mode |
|
59 || evsql_result_uint64(res, row, col_offset + 2, &size, 0 ) // inodes.size |
|
60 || evsql_result_uint64(res, row, col_offset + 3, &nlink, 0 ) // count(*) |
|
61 ) |
|
62 EERROR(err = EIO, "invalid db data"); |
|
63 |
|
64 INFO("\tst_mode=S_IF%s | %ho, st_nlink=%llu, st_size=%llu", type, mode, (long long unsigned int) nlink, (long long unsigned int) size); |
|
65 |
|
66 // convert and store |
|
67 st->st_mode = _dbfs_mode(type) | mode; |
|
68 st->st_nlink = nlink; |
|
69 st->st_size = size; |
|
70 |
|
71 // good |
|
72 return 0; |
|
73 |
|
74 error: |
|
75 return -1; |
|
76 } |
|
77 |
|
78 |
|
79 |