Initial commit to Gerrit
[profile/ivi/quota.git] / quotaio_rpc.c
1 /*
2  *      quotaio_rpc.c - quota IO operations for RPC (just wrappers for RPC calls)
3  */
4
5 #include "config.h"
6
7 #include <stdio.h>
8 #include <errno.h>
9 #include <stdlib.h>
10 #include <sys/types.h>
11
12 #include "common.h"
13 #include "quotaio.h"
14 #include "dqblk_rpc.h"
15 #include "rquota_client.h"
16 #include "pot.h"
17
18 static struct dquot *rpc_read_dquot(struct quota_handle *h, qid_t id);
19 static int rpc_commit_dquot(struct dquot *dquot, int flags);
20
21 struct quotafile_ops quotafile_ops_rpc = {
22 read_dquot:     rpc_read_dquot,
23 commit_dquot:   rpc_commit_dquot
24 };
25
26 /*
27  *      Read a dqblk struct from RPC server - just wrapper function.
28  */
29 static struct dquot *rpc_read_dquot(struct quota_handle *h, qid_t id)
30 {
31 #ifdef RPC
32         struct dquot *dquot = get_empty_dquot();
33         int ret;
34
35         dquot->dq_id = id;
36         dquot->dq_h = h;
37         if ((ret = rpc_rquota_get(dquot)) < 0) {
38                 errno = -ret;
39                 free(dquot);
40                 return NULL;
41         }
42         return dquot;
43 #else
44         errno = ENOTSUP;
45         return NULL;
46 #endif
47 }
48
49 /*
50  *      Write a dqblk struct to RPC server - just wrapper function.
51  */
52 static int rpc_commit_dquot(struct dquot *dquot, int flags)
53 {
54 #ifdef RPC
55         int ret;
56
57         if (QIO_RO(dquot->dq_h)) {
58                 errstr(_("Trying to write quota to readonly quotafile on %s\n"), dquot->dq_h->qh_quotadev);
59                 errno = EPERM;
60                 return -1;
61         }
62         if ((ret = rpc_rquota_set(QCMD(Q_RPC_SETQUOTA, dquot->dq_h->qh_type), dquot)) < 0) {
63                 errno = -ret;
64                 return -1;
65         }
66         return 0;
67 #else
68         errno = ENOTSUP;
69         return -1;
70 #endif
71 }