77 |
77 |
78 error: |
78 error: |
79 return err; |
79 return err; |
80 } |
80 } |
81 |
81 |
82 int _dbfs_stat_info (struct stat *st, struct evsql_result *res, size_t row, size_t col_offset) { |
82 int _dbfs_stat_info (struct stat *st, struct dbfs_stat_values *values) { |
83 int err = 0; |
83 int err = 0; |
84 |
84 |
85 uint16_t mode; |
85 INFO("\tst_mode=S_IF%s | %ho, st_nlink=%llu, st_size=%llu", values->type, values->mode, (long long unsigned int) values->nlink, (long long unsigned int) values->size); |
86 uint32_t size = 0; // NULL for non-REG inodes |
|
87 uint64_t nlink = 0; // will be NULL for non-GROUP BY queries |
|
88 const char *type; |
|
89 |
|
90 // extract the data |
|
91 if ((0 |
|
92 || evsql_result_string(res, row, col_offset + 0, &type, 0 ) // inodes.type |
|
93 || evsql_result_uint16(res, row, col_offset + 1, &mode, 0 ) // inodes.mode |
|
94 || evsql_result_uint32(res, row, col_offset + 2, &size, 1 ) // size |
|
95 || evsql_result_uint64(res, row, col_offset + 3, &nlink, 1 ) // count(*) |
|
96 ) && (err = EIO)) |
|
97 ERROR("invalid db data"); |
|
98 |
|
99 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); |
|
100 |
86 |
101 // convert and store |
87 // convert and store |
102 st->st_mode = _dbfs_mode(type) | mode; |
88 st->st_mode = _dbfs_mode(values->type) | values->mode; |
103 st->st_nlink = nlink; |
89 st->st_nlink = values->nlink; |
104 st->st_size = size; |
90 st->st_size = values->size; |
105 |
91 |
106 // good |
92 // good |
107 return 0; |
93 return 0; |
108 |
94 |
109 error: |
95 error: |