src/dbfs/common.c
branchnew-evsql
changeset 49 bb2ff0d2d343
parent 48 8b019d191353
child 50 881de320e483
equal deleted inserted replaced
48:8b019d191353 49:bb2ff0d2d343
    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: