added url_get_max_packet_size() support - added URL_RDWR flag

Originally committed as revision 795 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Fabrice Bellard 2002-07-24 17:50:23 +00:00
parent f031df23fe
commit 8a9488b550
1 changed files with 27 additions and 5 deletions

View File

@ -58,15 +58,18 @@ int url_open(URLContext **puc, const char *filename, int flags)
goto found;
up = up->next;
}
return -ENOENT;
err = -ENOENT;
goto fail;
found:
uc = av_malloc(sizeof(URLContext));
if (!uc)
return -ENOMEM;
if (!uc) {
err = -ENOMEM;
goto fail;
}
uc->prot = up;
uc->flags = flags;
uc->is_streamed = 0; /* default = not streamed */
uc->packet_size = 1; /* default packet size */
uc->max_packet_size = 0; /* default: stream file */
err = up->url_open(uc, filename, flags);
if (err < 0) {
av_free(uc);
@ -75,6 +78,9 @@ int url_open(URLContext **puc, const char *filename, int flags)
}
*puc = uc;
return 0;
fail:
*puc = NULL;
return err;
}
int url_read(URLContext *h, unsigned char *buf, int size)
@ -89,8 +95,11 @@ int url_read(URLContext *h, unsigned char *buf, int size)
int url_write(URLContext *h, unsigned char *buf, int size)
{
int ret;
if (!(h->flags & URL_WRONLY))
if (!(h->flags & (URL_WRONLY | URL_RDWR)))
return -EIO;
/* avoid sending too big packets */
if (h->max_packet_size && size > h->max_packet_size)
return -EIO;
ret = h->prot->url_write(h, buf, size);
return ret;
}
@ -132,3 +141,16 @@ offset_t url_filesize(URLContext *h)
url_seek(h, pos, SEEK_SET);
return size;
}
/*
* Return the maximum packet size associated to packetized file
* handle. If the file is not packetized (stream like http or file on
* disk), then 0 is returned.
*
* @param h file handle
* @return maximum packet size in bytes
*/
int url_get_max_packet_size(URLContext *h)
{
return h->max_packet_size;
}