src/dbfs/attr.c
author Tero Marttila <terom@fixme.fi>
Fri, 17 Oct 2008 02:04:03 +0300
changeset 31 7804cd7b5cd5
child 32 90e14e0df133
permissions -rw-r--r--
write+setattr
31
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
#include "dbfs.h"
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
#include "../lib/log.h"
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
#include "../lib/misc.h"
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
// max. size for a setattr UPDATE query
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
#define DBFS_SETATTR_SQL_MAX 512
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
// for building the setattr UPDATE
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
#define FIELD(to_set, flag, field, value) ((to_set) & (flag)) ? (field " = " value ", ") : ""
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
void _dbfs_attr_res (const struct evsql_result_info *res, void *arg) {
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
    struct fuse_req *req = arg;
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
    struct stat st; ZINIT(st);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
    int err = 0;
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
    
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
    uint32_t ino;
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
    // check the results
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
    if ((err = _dbfs_check_res(res, 1, 5)))
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
        SERROR(err = (err ==  1 ? ENOENT : EIO));
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
        
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
    // get our data
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
    if (0
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
        ||  evsql_result_uint32(res, 0, 0, &ino,        0 ) // inodes.ino
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
    )
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
        EERROR(err = EIO, "invalid db data");
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
 
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
        
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
    INFO("[dbfs.getattr %p] -> ino=%lu, stat follows", req, (unsigned long int) ino);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
    
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
    // stat attrs
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
    if ((err = _dbfs_stat_info(&st, res, 0, 1)))
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
        goto error;
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
    // XXX: we don't have the ino
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
    st.st_ino = ino;
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
    // reply
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
    if ((err = fuse_reply_attr(req, &st, st.st_nlink ? CACHE_TIMEOUT : 0)))
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
        EERROR(err, "fuse_reply_entry");
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
error:
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
    if (err && (err = fuse_reply_err(req, err)))
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
        EWARNING(err, "fuse_reply_err");
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
    // free
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
    evsql_result_free(res);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
}
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
void dbfs_getattr (struct fuse_req *req, fuse_ino_t ino, struct fuse_file_info *fi) {
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
    struct dbfs *ctx = fuse_req_userdata(req);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
    int err;
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
    
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
    (void) fi;
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
    INFO("[dbfs.getattr %p] ino=%lu", req, ino);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
    const char *sql =
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
        "SELECT"
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
        " inodes.ino, " DBFS_STAT_COLS
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
        " FROM inodes"
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
        " WHERE inodes.ino = $1::int4"
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
        " GROUP BY inodes.ino, inodes.type, inodes.mode, data";
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
    static struct evsql_query_params params = EVSQL_PARAMS(EVSQL_FMT_BINARY) {
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
        EVSQL_PARAM ( UINT32 ),
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
        EVSQL_PARAMS_END
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
    };
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
    // build params
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
    if (0
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
        ||  evsql_param_uint32(&params, 0, ino)
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
    )
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
        SERROR(err = EIO);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
        
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
    // query
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
    if (evsql_query_params(ctx->db, NULL, sql, &params, _dbfs_attr_res, req) == NULL)
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
        SERROR(err = EIO);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
    // XXX: handle interrupts
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
    
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
    // wait
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
    return;
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
error:
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
    if ((err = fuse_reply_err(req, err)))
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
        EWARNING(err, "fuse_reply_err");
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
}
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    91
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    93
void dbfs_setattr (struct fuse_req *req, fuse_ino_t ino, struct stat *attr, int to_set, struct fuse_file_info *fi) {
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
    struct dbfs *ctx = fuse_req_userdata(req);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    95
    int err;
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
    int ret;
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
    
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
    char sql_buf[DBFS_SETATTR_SQL_MAX];
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
    
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   100
    static struct evsql_query_params params = EVSQL_PARAMS(EVSQL_FMT_BINARY) {
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
        EVSQL_PARAM ( UINT16 ), // inodes.mode
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   102
        EVSQL_PARAM ( UINT32 ), // inodes.uid
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
        EVSQL_PARAM ( UINT32 ), // inodes.gid
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
        EVSQL_PARAM ( UINT32 ), // data size
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   105
        EVSQL_PARAM ( UINT32 ), // ino
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
        EVSQL_PARAMS_END
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
    };
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
    // log
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   111
    INFO("[dbfs.setattr %p] ino=%lu, fileop=%p: ", req, ino, fi && fi->fh ? (void*) fi->fh : NULL);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
    
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
    if (to_set & FUSE_SET_ATTR_MODE) {
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
        // ignore the S_IFMT
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
        attr->st_mode &= 07777;
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
        INFO("\tmode    = %08o", attr->st_mode);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
    }
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   120
    if (to_set & FUSE_SET_ATTR_UID)
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
        INFO("\tuid     = %u", attr->st_uid);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   122
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   123
    if (to_set & FUSE_SET_ATTR_GID)
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   124
        INFO("\tgid     = %u", attr->st_gid);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   126
    if (to_set & FUSE_SET_ATTR_SIZE)
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   127
        INFO("\tsize    = %lu", attr->st_size);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   128
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
    if (to_set & FUSE_SET_ATTR_ATIME)
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   130
        INFO("\tatime   = %lu", attr->st_atime);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   131
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   132
    if (to_set & FUSE_SET_ATTR_MTIME)
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   133
        INFO("\tmtime   = %lu", attr->st_mtime);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   134
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   135
    // the SQL
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   136
    if ((ret = snprintf(sql_buf, DBFS_SETATTR_SQL_MAX,
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   137
        "UPDATE inodes SET"
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   138
        " %s%s%s%s ino = ino"
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   139
        " WHERE inodes.ino = $5::int4"
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   140
        " RETURNING inodes.ino, " DBFS_STAT_COLS_NOAGGREGATE,
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   141
        
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
        FIELD(to_set, FUSE_SET_ATTR_MODE,   "mode", "$1::int2"),
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   143
        FIELD(to_set, FUSE_SET_ATTR_UID,    "uid",  "$2::int4"),
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   144
        FIELD(to_set, FUSE_SET_ATTR_GID,    "gid",  "$3::int4"),
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   145
        FIELD(to_set, FUSE_SET_ATTR_SIZE,   "data", "lo_otruncate(data, $4::int4)")
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   146
    )) >= DBFS_SETATTR_SQL_MAX && (err = EIO))
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
        ERROR("sql_buf is too small: %i", ret);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   148
    
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   149
    // the params...
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   150
    if (0
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   151
        || (                                  evsql_params_clear(&params)                    )
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   152
        || ((to_set & FUSE_SET_ATTR_MODE ) && evsql_param_uint16(&params, 0, attr->st_mode)  )
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   153
        || ((to_set & FUSE_SET_ATTR_UID  ) && evsql_param_uint32(&params, 1, attr->st_uid)   )
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   154
        || ((to_set & FUSE_SET_ATTR_GID  ) && evsql_param_uint32(&params, 2, attr->st_gid)   )
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   155
        || ((to_set & FUSE_SET_ATTR_SIZE ) && evsql_param_uint32(&params, 3, attr->st_size)  )
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   156
        || (                                  evsql_param_uint32(&params, 4, ino)            )
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   157
    )
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   158
        SERROR(err = EIO);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   159
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   160
    // trace the query
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   161
    evsql_query_debug(sql_buf, &params);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   162
    
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   163
    // query... we can pretend it's a getattr :)
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   164
    if (evsql_query_params(ctx->db, NULL, sql_buf, &params, _dbfs_attr_res, req) == NULL)
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   165
        SERROR(err = EIO);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   166
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   167
    // XXX: handle interrupts
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   168
    
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   169
    // wait
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   170
    return;
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   171
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   172
error:
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   173
    if ((err = fuse_reply_err(req, err)))
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   174
        EWARNING(err, "fuse_reply_err");
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   175
}