?? stream_file.c
字號:
//#include "config.h"#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>//#include "mp_msg.h"#include "../include/stream.h"//#include "help_mp.h"//#include "m_option.h"//#include "m_struct.h"//static struct stream_priv_s {// char* filename;// char *filename2;//} stream_priv_dflts = {// NULL, NULL//};////#define ST_OFF(f) M_ST_OFF(struct stream_priv_s,f)///// URL definition//static m_option_t stream_opts_fields[] = {// {"string", ST_OFF(filename), CONF_TYPE_STRING, 0, 0 ,0, NULL},// {"filename", ST_OFF(filename2), CONF_TYPE_STRING, 0, 0 ,0, NULL},// { NULL, NULL, 0, 0, 0, 0, NULL }//};//static struct m_struct_st stream_opts = {// "file",// sizeof(struct stream_priv_s),// &stream_priv_dflts,// stream_opts_fields//}; static RMint32 fill_buffer(stream_t *s, RMascii* buffer, RMint32 max_len){ int r = read(s->fd,buffer,max_len); return (r <= 0) ? -1 : r;}static RMint32 write_buffer(stream_t *s, RMascii* buffer, RMint32 len) { int r = write(s->fd,buffer,len); return (r <= 0) ? -1 : r;}static RMint32 seek(stream_t *s,off_t newpos) { s->pos = newpos; if(lseek(s->fd,s->pos,SEEK_SET)<0) { s->eof=1; return 0; } return 1;}static RMint32 seek_forward(stream_t *s,off_t newpos) { if(newpos<s->pos){ return 0; } while(s->pos<newpos){ int len=s->fill_buffer(s,s->buffer,STREAM_BUFFER_SIZE); if(len<=0){ s->eof=1; s->buf_pos=s->buf_len=0; break; } // EOF s->buf_pos=0; s->buf_len=len; s->pos+=len; } return 1;}static RMint32 open_f(stream_t *stream, RMint32 mode, void* opts, RMint32* file_format) { RMint32 f; mode_t m = 0; off_t len; RMuint8 *filename; // struct stream_priv_s* p = (struct stream_priv_s*)opts; if(mode == STREAM_READ) m = O_RDONLY; else if(mode == STREAM_WRITE) m = O_WRONLY; else {// m_struct_free(&stream_opts,opts); return STREAM_UNSUPORTED; } if(stream->url) filename = stream->url;// else if(opts) // filename = opts; else filename = NULL; if(!filename) { // m_struct_free(&stream_opts,opts); return STREAM_ERROR; } if(!strcmp(filename,"-")){ if(mode == STREAM_READ) { // read from stdin f=0; // 0=stdin } else { f=1; } } else { f=open(filename,m); if(f<0) { return STREAM_ERROR; } } len=lseek(f,0,SEEK_END); lseek(f,0,SEEK_SET); if(len == -1) { stream->seek = seek_forward; stream->type = STREAMTYPE_STREAM; // Must be move to STREAMTYPE_FILE stream->flags |= STREAM_SEEK_FW; } else if(len >= 0) { stream->seek = seek; stream->end_pos = len; stream->type = STREAMTYPE_FILE; } stream->fd = f; stream->fill_buffer = fill_buffer; stream->write_buffer = write_buffer; return STREAM_OK;}stream_info_t stream_info_file = { "File", "file", "Albeu", "based on the code from ??? (probably Arpi)", open_f, { "file", "", NULL }};
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -