mirror of https://github.com/mpv-player/mpv
stream_file: uncrustify
This commit is contained in:
parent
a9cb2dc1b8
commit
974250b60c
|
@ -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 },
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue