5 #include <9p-mixp/mixp.h>
6 #include <9p-mixpsrv/types.h>
7 #include <9p-mixpsrv/default_ops.h>
8 #include <9p-mixpsrv/call_ops.h>
11 #define QID(t, i) (((long long)((t)&0xFF)<<32)|((i)&0xFFFFFFFF))
13 int mixpsrv_default_ops_open(MIXPSRV_FILE_HANDLE
* f
, long mode
)
15 /* if we don't have an own open() function, this is the default */
16 if((mode
&3) == P9_OEXEC
)
21 if((mode
&3) != P9_OREAD
&& !(f
->perm
& 0200)) {
25 // if((mode&3) != P9_OWRITE && !(f->tab.perm & 0400)) {
29 if((mode
&~(3|P9_OAPPEND
|P9_OTRUNC
))) {
36 long mixpsrv_default_ops_read(MIXPSRV_FILE_HANDLE
* f
, long offset
, size_t size
, void* buffer
)
38 printf("mixp_defaultops_read() no data.\n");
42 long mixpsrv_default_ops_write(MIXPSRV_FILE_HANDLE
* f
, long offset
, size_t size
, void* buffer
)
44 fprintf(stderr
,"mixpsrv_default_ops_write() offset=%ld size=%uld\n", offset
, size
);
48 long mixpsrv_default_ops_size(MIXPSRV_FILE_HANDLE
* f
)
51 fprintf(stderr
,"mixpsrv_default_ops_size(): zero .. name=\"%s\"\n", f
->name
);
56 int mixpsrv_default_ops_close(MIXPSRV_FILE_HANDLE
* f
)
58 fprintf(stderr
,"mixpsrv_default_ops_close(): close unsupported\n");
62 int mixpsrv_default_ops_stat(MIXPSRV_FILE_HANDLE
* f
, MIXP_STAT
*s
)
66 s
->qid
.path
= QID(f
->type
, f
->id
);
68 s
->qid
.type
= f
->qtype
;
70 s
->atime
= time(NULL
);
71 s
->mtime
= time(NULL
);
72 s
->name
= (f
->name
? f
->name
: "???");
73 s
->uid
= s
->gid
= s
->muid
= "INCOGNITO";
74 s
->length
= mixpsrv_call_ops_size(f
);
79 MIXPSRV_FILE_OPS mixp_default_fileops
= {
80 .open
= mixpsrv_default_ops_open
,
81 .read
= mixpsrv_default_ops_read
,
82 .write
= mixpsrv_default_ops_write
,
83 .size
= mixpsrv_default_ops_size
,
84 .stat
= mixpsrv_default_ops_stat
,
85 .classname
= "default"