summaryrefslogtreecommitdiff
path: root/emu/port/devssl.c
diff options
context:
space:
mode:
authorCharles.Forsyth <devnull@localhost>2009-03-25 16:37:32 +0000
committerCharles.Forsyth <devnull@localhost>2009-03-25 16:37:32 +0000
commite0a2b8d82a5521d9391ca8c6f055777954c76c2f (patch)
treebed98eebad567e161db651e8a173f1a819169292 /emu/port/devssl.c
parentd8150d92150b08ade63d7cd8b666cb26551110ff (diff)
x20090315-1636
Diffstat (limited to 'emu/port/devssl.c')
-rw-r--r--emu/port/devssl.c52
1 files changed, 29 insertions, 23 deletions
diff --git a/emu/port/devssl.c b/emu/port/devssl.c
index c8c16fc3..ca224a7f 100644
--- a/emu/port/devssl.c
+++ b/emu/port/devssl.c
@@ -375,7 +375,7 @@ ensure(Dstate *s, Block **l, int n)
}
while(sofar < n){
- bl = devtab[s->c->type]->bread(s->c, Maxdmsg, 0);
+ bl = s->c->dev->bread(s->c, Maxdmsg, 0);
if(bl == 0)
error(Ehungup);
*l = bl;
@@ -466,7 +466,7 @@ qtake(Block **l, int n, int discard)
}
static Block*
-sslbread(Chan *c, long n, ulong offset)
+sslbread(Chan *c, long n, vlong offset)
{
volatile struct { Dstate *s; } s;
volatile struct { int nc; } nc;
@@ -623,7 +623,7 @@ randfill(uchar *buf, int len)
* use SSL record format, add in count and digest or encrypt
*/
static long
-sslbwrite(Chan *c, Block *b, ulong offset)
+sslbwrite(Chan *c, Block *b, vlong offset)
{
volatile struct { Dstate *s; } s;
volatile struct { Block *b; } bb;
@@ -719,7 +719,7 @@ sslbwrite(Chan *c, Block *b, ulong offset)
s.s->out.mid++;
m = BLEN(nb);
- devtab[s.s->c->type]->bwrite(s.s->c, nb, s.s->c->offset);
+ s.s->c->dev->bwrite(s.s->c, nb, s.s->c->offset);
s.s->c->offset += m;
}
qunlock(&s.s->out.q);
@@ -1133,6 +1133,27 @@ out:
}
+Dev ssldevtab = {
+ 'D',
+ "ssl",
+
+ devreset,
+ sslinit,
+ devshutdown,
+ sslattach,
+ sslwalk,
+ sslstat,
+ sslopen,
+ devcreate,
+ sslclose,
+ sslread,
+ sslbread,
+ sslwrite,
+ sslbwrite,
+ devremove,
+ sslwstat
+};
+
static Block*
encryptb(Dstate *s, Block *b, int offset)
{
@@ -1343,6 +1364,10 @@ buftochan(char *p)
if(fd < 0)
error(Ebadarg);
c = fdtochan(up->env->fgrp, fd, -1, 0, 1); /* error check and inc ref */
+ if(c->dev == &ssldevtab){
+ cclose(c);
+ error("cannot ssl encrypt devssl files");
+ }
return c;
}
@@ -1420,22 +1445,3 @@ dsnew(Chan *ch, Dstate **pp)
ch->qid.vers = 0;
ch->qid.type = QTFILE;
}
-
-Dev ssldevtab = {
- 'D',
- "ssl",
-
- sslinit,
- sslattach,
- sslwalk,
- sslstat,
- sslopen,
- devcreate,
- sslclose,
- sslread,
- sslbread,
- sslwrite,
- sslbwrite,
- devremove,
- sslwstat
-};