[MPlayer-dev-eng] [PATCH] Subtitles directories
Reimar Döffinger
Reimar.Doeffinger at gmx.de
Sat Nov 20 11:19:47 CET 2010
On Sat, Nov 20, 2010 at 09:33:22AM +0100, Clément Bœsch wrote:
> +/**
> + * \brief Allocates a new buffer containing the directory name
> + * \param path Original path. Must be a valid string.
> + *
> + * The path returned always contains a trailing slash '/'.
> + * On systems supporting DOS paths, '\' is also considered as a directory
> + * separator in addition to the '/'.
> + */
> +char *mp_dirname(const char *path)
> +{
> + char *tmp, *s;
> + size_t len;
> +
> + tmp = strrchr(path, '/');
> +
> +#if HAVE_DOS_PATHS
> + if (!tmp)
> + tmp = strrchr(path, '\\');
> +#endif
Please test this with the samples for mp_basename.
I think this is not working correctly at least with mixed DOS paths
like c:/test\b\c.avi
Actually I think you should try reusing mp_basename here,
everything before what mp_basename returns should be the path,
you should then only need to have a special-case for when there
is nothing before it.
> @@ -1889,17 +1897,35 @@ static int compare_sub_priority(const void *a, const void *b)
> }
> }
>
> -char** sub_filenames(const char* path, char *fname)
> +static void append_sub(struct sub_list *dst, struct subfn *src)
> +{
> + if (dst->sid >= (int)dst->size - 1) {
> + dst->size += 32;
> + dst->subs = realloc(dst->subs, sizeof(*dst->subs) * dst->size);
> + }
> + memcpy(&dst->subs[dst->sid], src, sizeof(*src));
> + dst->sid++;
> +}
> +
> +static void merge_subs(struct sub_list *dst, struct sub_list *src)
> +{
> + if (src->sid == 0)
> + return;
> + dst->size = dst->sid + src->sid;
> + dst->subs = realloc(dst->subs, sizeof(*dst->subs) * dst->size);
> + memcpy(&dst->subs[dst->sid], src->subs, src->sid * sizeof(*src->subs));
> + dst->sid += src->sid;
> +}
I think this is too much in one patch, I have a hard time understanding
which part solves which issue.
I'd strongly prefer it in more parts, e.g.
1) use mp_basename/mp_dirname
2) look at additional paths
3) support loading multiple subtitles (or does it just change it?
I don't really know, but I know your changes are at least 4-times
as large as for what I consider reasonable just to support
loading from one more path).
Particularly 3) I consider likely to have subtle issues and I don't
like having it mixed up with other changes at all.
> @@ -1954,9 +1958,9 @@ char** sub_filenames(const char* path, char *fname)
> // 1 = any subtitle file
> // 2 = any sub file containing movie name
> // 3 = sub file containing movie name and the lang extension
> - for (j = 0; j <= 1; j++) {
> - d = opendir(j == 0 ? f_dir : path);
> + d = opendir(path);
> if (d) {
> + mp_msg(MSGT_SUBREADER, MSGL_INFO, "Load subtitles in %s\n", path);
> while ((de = readdir(d))) {
Indentation is off.
More information about the MPlayer-dev-eng
mailing list