Commit 019ac05a authored by Fabrice Bellard's avatar Fabrice Bellard

added primitive aborting system

Originally committed as revision 2058 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent d5809b0a
...@@ -19,7 +19,10 @@ ...@@ -19,7 +19,10 @@
#include "avformat.h" #include "avformat.h"
#include <ctype.h> #include <ctype.h>
static int default_interrupt_cb(void);
URLProtocol *first_protocol = NULL; URLProtocol *first_protocol = NULL;
URLInterruptCB *url_interrupt_cb = default_interrupt_cb;
int register_protocol(URLProtocol *protocol) int register_protocol(URLProtocol *protocol)
{ {
...@@ -165,3 +168,22 @@ void url_get_filename(URLContext *h, char *buf, int buf_size) ...@@ -165,3 +168,22 @@ void url_get_filename(URLContext *h, char *buf, int buf_size)
{ {
pstrcpy(buf, buf_size, h->filename); pstrcpy(buf, buf_size, h->filename);
} }
static int default_interrupt_cb(void)
{
return 0;
}
/**
* The callback is called in blocking functions to test regulary if
* asynchronous interruption is needed. -EINTR is returned in this
* case by the interrupted function. 'NULL' means no interrupt
* callback is given.
*/
void url_set_interrupt_cb(URLInterruptCB *interrupt_cb)
{
if (!interrupt_cb)
interrupt_cb = default_interrupt_cb;
url_interrupt_cb = interrupt_cb;
}
...@@ -28,6 +28,8 @@ typedef struct URLPollEntry { ...@@ -28,6 +28,8 @@ typedef struct URLPollEntry {
#define URL_WRONLY 1 #define URL_WRONLY 1
#define URL_RDWR 2 #define URL_RDWR 2
typedef int URLInterruptCB(void);
int url_open(URLContext **h, const char *filename, int flags); int url_open(URLContext **h, const char *filename, int flags);
int url_read(URLContext *h, unsigned char *buf, int size); int url_read(URLContext *h, unsigned char *buf, int size);
int url_write(URLContext *h, unsigned char *buf, int size); int url_write(URLContext *h, unsigned char *buf, int size);
...@@ -38,6 +40,12 @@ offset_t url_filesize(URLContext *h); ...@@ -38,6 +40,12 @@ offset_t url_filesize(URLContext *h);
int url_get_max_packet_size(URLContext *h); int url_get_max_packet_size(URLContext *h);
void url_get_filename(URLContext *h, char *buf, int buf_size); void url_get_filename(URLContext *h, char *buf, int buf_size);
/* the callback is called in blocking functions to test regulary if
asynchronous interruption is needed. -EINTR is returned in this
case by the interrupted function. 'NULL' means no interrupt
callback is given. */
void url_set_interrupt_cb(URLInterruptCB *interrupt_cb);
/* not implemented */ /* not implemented */
int url_poll(URLPollEntry *poll_table, int n, int timeout); int url_poll(URLPollEntry *poll_table, int n, int timeout);
...@@ -52,6 +60,7 @@ typedef struct URLProtocol { ...@@ -52,6 +60,7 @@ typedef struct URLProtocol {
} URLProtocol; } URLProtocol;
extern URLProtocol *first_protocol; extern URLProtocol *first_protocol;
extern URLInterruptCB *url_interrupt_cb;
int register_protocol(URLProtocol *protocol); int register_protocol(URLProtocol *protocol);
...@@ -100,7 +109,7 @@ int url_feof(ByteIOContext *s); ...@@ -100,7 +109,7 @@ int url_feof(ByteIOContext *s);
#define URL_EOF (-1) #define URL_EOF (-1)
int url_fgetc(ByteIOContext *s); int url_fgetc(ByteIOContext *s);
int url_fprintf(ByteIOContext *s, const char *fmt, ...); int url_fprintf(ByteIOContext *s, const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
char *url_fgets(ByteIOContext *s, char *buf, int buf_size); char *url_fgets(ByteIOContext *s, char *buf, int buf_size);
void put_flush_packet(ByteIOContext *s); void put_flush_packet(ByteIOContext *s);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment