stream_file: uncrustify

This commit is contained in:
wm4 2013-08-22 18:08:46 +02:00
parent a9cb2dc1b8
commit 974250b60c
1 changed files with 144 additions and 136 deletions

View File

@ -38,173 +38,181 @@ struct priv {
bool close; bool close;
}; };
static int fill_buffer(stream_t *s, char* buffer, int max_len){ static int fill_buffer(stream_t *s, char *buffer, int max_len)
struct priv *p = s->priv; {
int r = read(p->fd,buffer,max_len); struct priv *p = s->priv;
return (r <= 0) ? -1 : r; int r = read(p->fd, buffer, max_len);
return (r <= 0) ? -1 : r;
} }
static int write_buffer(stream_t *s, char* buffer, int len) { static int write_buffer(stream_t *s, char *buffer, int len)
struct priv *p = s->priv; {
int r; struct priv *p = s->priv;
int wr = 0; int r;
while (wr < len) { int wr = 0;
r = write(p->fd,buffer,len); while (wr < len) {
if (r <= 0) r = write(p->fd, buffer, len);
return -1; if (r <= 0)
wr += r; return -1;
buffer += r; wr += r;
} buffer += r;
return len;
}
static int seek(stream_t *s,int64_t newpos) {
struct priv *p = s->priv;
s->pos = newpos;
if(lseek(p->fd,s->pos,SEEK_SET)<0) {
return 0;
}
return 1;
}
static int seek_forward(stream_t *s,int64_t newpos) {
if(newpos<s->pos){
mp_msg(MSGT_STREAM,MSGL_INFO,"Cannot seek backward in linear streams!\n");
return 0;
}
while(s->pos<newpos){
int len=s->fill_buffer(s,s->buffer,STREAM_BUFFER_SIZE);
if(len<=0){ s->buf_pos=s->buf_len=0; break; } // EOF
s->buf_pos=0;
s->buf_len=len;
s->pos+=len;
}
return 1;
}
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;
size = lseek(p->fd, 0, SEEK_END);
lseek(p->fd, s->pos, SEEK_SET);
if(size != (off_t)-1) {
*(uint64_t*)arg = size;
return 1;
}
} }
} return len;
return STREAM_UNSUPPORTED; }
static int seek(stream_t *s, int64_t newpos)
{
struct priv *p = s->priv;
s->pos = newpos;
if (lseek(p->fd, s->pos, SEEK_SET) < 0)
return 0;
return 1;
}
static int seek_forward(stream_t *s, int64_t newpos)
{
if (newpos < s->pos) {
mp_msg(MSGT_STREAM, MSGL_INFO,
"Cannot seek backward in linear streams!\n");
return 0;
}
while (s->pos < newpos) {
int len = s->fill_buffer(s, s->buffer, STREAM_BUFFER_SIZE);
if (len <= 0) { // EOF
s->buf_pos = s->buf_len = 0;
break;
}
s->buf_pos = 0;
s->buf_len = len;
s->pos += len;
}
return 1;
}
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;
size = lseek(p->fd, 0, SEEK_END);
lseek(p->fd, s->pos, SEEK_SET);
if (size != (off_t)-1) {
*(uint64_t *)arg = size;
return 1;
}
}
}
return STREAM_UNSUPPORTED;
} }
static void s_close(stream_t *s) static void s_close(stream_t *s)
{ {
struct priv *p = s->priv; struct priv *p = s->priv;
if (p->close && p->fd >= 0) if (p->close && p->fd >= 0)
close(p->fd); close(p->fd);
} }
static int open_f(stream_t *stream, int mode) static int open_f(stream_t *stream, int mode)
{ {
int f; int fd;
mode_t m = 0; char *filename = stream->path;
int64_t len; struct priv *priv = talloc_ptrtype(stream, priv);
char *filename = stream->path; *priv = (struct priv) {
struct priv *priv = talloc_ptrtype(stream, priv); .fd = -1
*priv = (struct priv) { .fd = -1 }; };
stream->priv = priv; stream->priv = priv;
if(mode == STREAM_READ) mode_t m = 0;
m = O_RDONLY; if (mode == STREAM_READ)
else if(mode == STREAM_WRITE) m = O_RDONLY;
m = O_RDWR|O_CREAT|O_TRUNC; else if (mode == STREAM_WRITE)
else { m = O_RDWR | O_CREAT | O_TRUNC;
mp_msg(MSGT_OPEN,MSGL_ERR, "[file] Unknown open mode %d\n",mode); else {
return STREAM_UNSUPPORTED; mp_msg(MSGT_OPEN, MSGL_ERR, "[file] Unknown open mode %d\n", mode);
} return STREAM_UNSUPPORTED;
}
// "file://" prefix -> decode URL-style escapes // "file://" prefix -> decode URL-style escapes
if (strlen(stream->url) > strlen(stream->path)) if (strlen(stream->url) > strlen(stream->path))
mp_url_unescape_inplace(stream->path); mp_url_unescape_inplace(stream->path);
#if HAVE_DOS_PATHS #if HAVE_DOS_PATHS
// extract '/' from '/x:/path' // extract '/' from '/x:/path'
if( filename[ 0 ] == '/' && filename[ 1 ] && filename[ 2 ] == ':' ) if (filename[0] == '/' && filename[1] && filename[2] == ':')
filename++; filename++;
#endif #endif
m |= O_BINARY; if (!strcmp(filename, "-")) {
if (mode == STREAM_READ) {
if(!strcmp(filename,"-")){ mp_tmsg(MSGT_OPEN, MSGL_INFO, "Reading from stdin...\n");
if(mode == STREAM_READ) { fd = 0;
// read from stdin
mp_tmsg(MSGT_OPEN,MSGL_INFO,"Reading from stdin...\n");
f=0; // 0=stdin
#if HAVE_SETMODE #if HAVE_SETMODE
setmode(fileno(stdin),O_BINARY); setmode(fileno(stdin), O_BINARY);
#endif #endif
} else {
mp_msg(MSGT_OPEN, MSGL_INFO, "Writing to stdout\n");
fd = 1;
#if HAVE_SETMODE
setmode(fileno(stdout), O_BINARY);
#endif
}
priv->fd = fd;
priv->close = false;
} else { } else {
mp_msg(MSGT_OPEN,MSGL_INFO,"Writing to stdout\n"); mode_t openmode = S_IRUSR | S_IWUSR;
f=1;
#if HAVE_SETMODE
setmode(fileno(stdout),O_BINARY);
#endif
}
priv->fd = f;
priv->close = false;
} else {
mode_t openmode = S_IRUSR|S_IWUSR;
#ifndef __MINGW32__ #ifndef __MINGW32__
openmode |= S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH; openmode |= S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
#endif #endif
f=open(filename,m, openmode); fd = open(filename, m | O_BINARY, openmode);
if(f<0) { if (fd < 0) {
mp_tmsg(MSGT_OPEN, MSGL_ERR, "Cannot open file '%s': %s\n", filename, mp_tmsg(MSGT_OPEN, MSGL_ERR, "Cannot open file '%s': %s\n",
strerror(errno)); filename, strerror(errno));
return STREAM_ERROR; return STREAM_ERROR;
} }
#ifndef __MINGW32__ #ifndef __MINGW32__
struct stat st; struct stat st;
if (fstat(f, &st) == 0 && S_ISDIR(st.st_mode)) { if (fstat(fd, &st) == 0 && S_ISDIR(st.st_mode)) {
mp_tmsg(MSGT_OPEN,MSGL_ERR,"File is a directory: '%s'\n",filename); mp_tmsg(MSGT_OPEN, MSGL_ERR, "File is a directory: '%s'\n",
close(f); filename);
return STREAM_ERROR; close(fd);
} return STREAM_ERROR;
}
#endif #endif
priv->fd = f; priv->fd = fd;
priv->close = true; priv->close = true;
} }
len=lseek(f,0,SEEK_END); lseek(f,0,SEEK_SET); int64_t len = lseek(fd, 0, SEEK_END);
lseek(fd, 0, SEEK_SET);
#ifdef __MINGW32__ #ifdef __MINGW32__
// seeks on stdin incorrectly succeed on MinGW // seeks on stdin incorrectly succeed on MinGW
if(f==0) if (fd == 0)
len = -1; len = -1;
#endif #endif
stream->type = STREAMTYPE_FILE; stream->type = STREAMTYPE_FILE;
if(len == -1 && mode == STREAM_READ) { if (len == -1 && mode == STREAM_READ) {
stream->seek = seek_forward; stream->seek = seek_forward;
stream->flags = MP_STREAM_SEEK_FW; stream->flags = MP_STREAM_SEEK_FW;
} else if(len >= 0) { } else if (len >= 0) {
stream->seek = seek; stream->seek = seek;
stream->end_pos = len; stream->end_pos = len;
} }
mp_msg(MSGT_OPEN,MSGL_V,"[file] File size is %"PRId64" bytes\n", (int64_t)len); mp_msg(MSGT_OPEN, MSGL_V, "[file] File size is %" PRId64 " bytes\n", len);
stream->fill_buffer = fill_buffer; stream->fill_buffer = fill_buffer;
stream->write_buffer = write_buffer; stream->write_buffer = write_buffer;
stream->control = control; stream->control = control;
stream->read_chunk = 64*1024; stream->read_chunk = 64 * 1024;
stream->close = s_close; stream->close = s_close;
return STREAM_OK; return STREAM_OK;
} }
const stream_info_t stream_info_file = { const stream_info_t stream_info_file = {
"file", "file",
open_f, open_f,
{ "file", "", NULL }, { "file", "", NULL },
}; };