diff options
Diffstat (limited to 'stream/stream_smb.c')
-rw-r--r-- | stream/stream_smb.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/stream/stream_smb.c b/stream/stream_smb.c index d98d3485c1..5c9a4a6b0b 100644 --- a/stream/stream_smb.c +++ b/stream/stream_smb.c @@ -26,6 +26,10 @@ #include "core/m_option.h" #include "core/m_struct.h" +struct priv { + int fd; +}; + static struct stream_priv_s { } stream_priv_dflts = { }; @@ -72,10 +76,11 @@ static void smb_auth_fn(const char *server, const char *share, } static int control(stream_t *s, int cmd, void *arg) { + struct priv *p = s->priv; switch(cmd) { case STREAM_CTRL_GET_SIZE: { - off_t size = smbc_lseek(s->fd,0,SEEK_END); - smbc_lseek(s->fd,s->pos,SEEK_SET); + off_t size = smbc_lseek(p->fd,0,SEEK_END); + smbc_lseek(p->fd,s->pos,SEEK_SET); if(size != (off_t)-1) { *(uint64_t *)arg = size; return 1; @@ -86,23 +91,26 @@ static int control(stream_t *s, int cmd, void *arg) { } static int seek(stream_t *s,int64_t newpos) { + struct priv *p = s->priv; s->pos = newpos; - if(smbc_lseek(s->fd,s->pos,SEEK_SET)<0) { + if(smbc_lseek(p->fd,s->pos,SEEK_SET)<0) { return 0; } return 1; } static int fill_buffer(stream_t *s, char* buffer, int max_len){ - int r = smbc_read(s->fd,buffer,max_len); + struct priv *p = s->priv; + int r = smbc_read(p->fd,buffer,max_len); return (r <= 0) ? -1 : r; } static int write_buffer(stream_t *s, char* buffer, int len) { + struct priv *p = s->priv; int r; int wr = 0; while (wr < len) { - r = smbc_write(s->fd,buffer,len); + r = smbc_write(p->fd,buffer,len); if (r <= 0) return -1; wr += r; @@ -112,7 +120,8 @@ static int write_buffer(stream_t *s, char* buffer, int len) { } static void close_f(stream_t *s){ - smbc_close(s->fd); + struct priv *p = s->priv; + smbc_close(p->fd); } static int open_f (stream_t *stream, int mode, void *opts) @@ -122,6 +131,9 @@ static int open_f (stream_t *stream, int mode, void *opts) int64_t len; int fd, err; + struct priv *priv = talloc_zero(stream, struct priv); + stream->priv = priv; + filename = stream->url; if(mode == STREAM_READ) @@ -165,7 +177,7 @@ static int open_f (stream_t *stream, int mode, void *opts) stream->seek = seek; if(mode == STREAM_READ) stream->end_pos = len; } - stream->fd = fd; + priv->fd = fd; stream->fill_buffer = fill_buffer; stream->write_buffer = write_buffer; stream->close = close_f; |