⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stream_file.c

📁 sigmadesign smp8623 gui source code ,bingo
💻 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 + -