summaryrefslogtreecommitdiffstats
path: root/sub/vobsub.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2012-07-29 18:12:23 +0200
committerwm4 <wm4@nowhere>2012-07-30 01:40:42 +0200
commit6009965cdd7984245188e3c7e68e28d60dd06078 (patch)
treed9feea74acd28b5a5adcdd724ebb7c9fa977f137 /sub/vobsub.c
parent897d1c01bca01bf874d4cd45a9bb4fc9b2b2806f (diff)
downloadmpv-6009965cdd7984245188e3c7e68e28d60dd06078.tar.bz2
mpv-6009965cdd7984245188e3c7e68e28d60dd06078.tar.xz
sub: remove unrar_exec
This removes the ability to open compressed bitmap subtitles from rar files. The code makes me afraid, and I never needed this feature.
Diffstat (limited to 'sub/vobsub.c')
-rw-r--r--sub/vobsub.c177
1 files changed, 0 insertions, 177 deletions
diff --git a/sub/vobsub.c b/sub/vobsub.c
index 2f3ba9e1e1..c8480c89bd 100644
--- a/sub/vobsub.c
+++ b/sub/vobsub.c
@@ -37,7 +37,6 @@
#include "spudec.h"
#include "mp_msg.h"
#include "path.h"
-#include "unrar_exec.h"
#include "libavutil/common.h"
extern int vobsub_id;
@@ -45,181 +44,6 @@ extern int vobsub_id;
// overridden if slang match any of vobsub streams.
static int vobsubid = -2;
-/**********************************************************************
- * RAR stream handling
- * The RAR file must have the same basename as the file to open
- **********************************************************************/
-#ifdef CONFIG_UNRAR_EXEC
-typedef struct {
- FILE *file;
- unsigned char *data;
- unsigned long size;
- unsigned long pos;
-} rar_stream_t;
-
-static rar_stream_t *rar_open(const char *const filename,
- const char *const mode)
-{
- rar_stream_t *stream;
- /* unrar_exec can only read */
- if (strcmp("r", mode) && strcmp("rb", mode)) {
- errno = EINVAL;
- return NULL;
- }
- stream = malloc(sizeof(rar_stream_t));
- if (stream == NULL)
- return NULL;
- /* first try normal access */
- stream->file = fopen(filename, mode);
- if (stream->file == NULL) {
- char *rar_filename;
- const char *p;
- int rc;
- /* Guess the RAR archive filename */
- rar_filename = NULL;
- p = strrchr(filename, '.');
- if (p) {
- ptrdiff_t l = p - filename;
- rar_filename = malloc(l + 5);
- if (rar_filename == NULL) {
- free(stream);
- return NULL;
- }
- strncpy(rar_filename, filename, l);
- strcpy(rar_filename + l, ".rar");
- } else {
- rar_filename = malloc(strlen(filename) + 5);
- if (rar_filename == NULL) {
- free(stream);
- return NULL;
- }
- strcpy(rar_filename, filename);
- strcat(rar_filename, ".rar");
- }
- /* get rid of the path if there is any */
- p = mp_basename(filename);
- rc = unrar_exec_get(&stream->data, &stream->size, p, rar_filename);
- if (!rc) {
- /* There is no matching filename in the archive. However, sometimes
- * the files we are looking for have been given arbitrary names in the archive.
- * Let's look for a file with an exact match in the extension only. */
- int i, num_files, name_len;
- ArchiveList_struct *list, *lp;
- num_files = unrar_exec_list(rar_filename, &list);
- if (num_files > 0) {
- char *demanded_ext;
- demanded_ext = strrchr (p, '.');
- if (demanded_ext) {
- int demanded_ext_len = strlen (demanded_ext);
- for (i = 0, lp = list; i < num_files; i++, lp = lp->next) {
- name_len = strlen (lp->item.Name);
- if (name_len >= demanded_ext_len && !strcasecmp (lp->item.Name + name_len - demanded_ext_len, demanded_ext)) {
- rc = unrar_exec_get(&stream->data, &stream->size,
- lp->item.Name, rar_filename);
- if (rc)
- break;
- }
- }
- }
- unrar_exec_freelist(list);
- }
- if (!rc) {
- free(rar_filename);
- free(stream);
- return NULL;
- }
- }
-
- free(rar_filename);
- stream->pos = 0;
- }
- return stream;
-}
-
-static int rar_close(rar_stream_t *stream)
-{
- if (stream->file)
- return fclose(stream->file);
- free(stream->data);
- return 0;
-}
-
-static int rar_eof(rar_stream_t *stream)
-{
- if (stream->file)
- return feof(stream->file);
- return stream->pos >= stream->size;
-}
-
-static long rar_tell(rar_stream_t *stream)
-{
- if (stream->file)
- return ftell(stream->file);
- return stream->pos;
-}
-
-static int rar_seek(rar_stream_t *stream, long offset, int whence)
-{
- if (stream->file)
- return fseek(stream->file, offset, whence);
- switch (whence) {
- case SEEK_SET:
- if (offset < 0) {
- errno = EINVAL;
- return -1;
- }
- stream->pos = offset;
- break;
- case SEEK_CUR:
- if (offset < 0 && stream->pos < (unsigned long) -offset) {
- errno = EINVAL;
- return -1;
- }
- stream->pos += offset;
- break;
- case SEEK_END:
- if (offset < 0 && stream->size < (unsigned long) -offset) {
- errno = EINVAL;
- return -1;
- }
- stream->pos = stream->size + offset;
- break;
- default:
- errno = EINVAL;
- return -1;
- }
- return 0;
-}
-
-static int rar_getc(rar_stream_t *stream)
-{
- if (stream->file)
- return getc(stream->file);
- if (rar_eof(stream))
- return EOF;
- return stream->data[stream->pos++];
-}
-
-static size_t rar_read(void *ptr, size_t size, size_t nmemb,
- rar_stream_t *stream)
-{
- size_t res;
- unsigned long remain;
- if (stream->file)
- return fread(ptr, size, nmemb, stream->file);
- if (rar_eof(stream))
- return 0;
- res = size * nmemb;
- remain = stream->size - stream->pos;
- if (res > remain)
- res = remain / size * size;
- memcpy(ptr, stream->data + stream->pos, res);
- stream->pos += res;
- res /= size;
- return res;
-}
-
-#else
typedef FILE rar_stream_t;
#define rar_open fopen
#define rar_close fclose
@@ -228,7 +52,6 @@ typedef FILE rar_stream_t;
#define rar_seek fseek
#define rar_getc getc
#define rar_read fread
-#endif
/**********************************************************************/