13 struct fuse_req *req = arg; |
13 struct fuse_req *req = arg; |
14 struct stat st; ZINIT(st); |
14 struct stat st; ZINIT(st); |
15 int err = 0; |
15 int err = 0; |
16 |
16 |
17 uint32_t ino; |
17 uint32_t ino; |
|
18 struct dbfs_stat_values stat_values; |
18 |
19 |
19 // check the results |
20 // result info |
20 if ((err = _dbfs_check_res(res, 1, 5))) |
21 static struct evsql_result_info result_info = { |
21 SERROR(err = (err == 1 ? ENOENT : EIO)); |
22 0, { |
22 |
23 { EVSQL_FMT_BINARY, EVSQL_TYPE_UINT32 }, // inodes.ino |
23 // get our data |
24 DBFS_STAT_RESULT_INFO, |
24 if (0 |
25 { 0, 0 } |
25 || evsql_result_uint32(res, 0, 0, &ino, 0 ) // inodes.ino |
26 } |
26 ) |
27 }; |
27 EERROR(err = EIO, "invalid db data"); |
28 |
28 |
29 // begin |
29 |
30 if ((err = evsql_result_begin(&result_info, res))) |
|
31 EERROR(err, "query failed"); |
|
32 |
|
33 // get the one row of data |
|
34 if ((err = evsql_result_next(res, &ino, DBFS_STAT_RESULT_VALUES(&stat_values))) <= 0) |
|
35 EERROR(err = (err ? err : ENOENT), "evsql_result_next"); |
|
36 |
30 INFO("\t[dbfs.getattr %p] -> ino=%lu, stat follows", req, (unsigned long int) ino); |
37 INFO("\t[dbfs.getattr %p] -> ino=%lu, stat follows", req, (unsigned long int) ino); |
31 |
38 |
32 // inode |
39 // inode |
33 st.st_ino = ino; |
40 st.st_ino = ino; |
34 |
41 |
35 // stat attrs |
42 // stat attrs |
36 if ((err = _dbfs_stat_info(&st, res, 0, 1))) |
43 if ((err = _dbfs_stat_info(&st, &stat_values))) |
37 goto error; |
44 goto error; |
38 |
45 |
39 // reply |
46 // reply |
40 if ((err = fuse_reply_attr(req, &st, st.st_nlink ? CACHE_TIMEOUT : 0))) |
47 if ((err = fuse_reply_attr(req, &st, st.st_nlink ? CACHE_TIMEOUT : 0))) |
41 EERROR(err, "fuse_reply_entry"); |
48 EERROR(err, "fuse_reply_entry"); |
42 |
49 |
43 error: |
50 error: |