[vlc-devel] [PATCH] sout: file: truncate path if too long
Thomas Guillem
thomas at gllm.fr
Mon Dec 16 14:17:03 CET 2019
Should I move this to a helper like vlc_truncate_path() ?
I guess there are more places in VLC's codebase that could need it.
On Mon, Dec 16, 2019, at 14:15, Thomas Guillem wrote:
> This fixes sout chain fail when the input path/url is too long. This can easily
> happen when the source is a network url that can be longer than local pathes.
> ---
> modules/access_output/file.c | 32 ++++++++++++++++++++++++++++++++
> 1 file changed, 32 insertions(+)
>
> diff --git a/modules/access_output/file.c b/modules/access_output/file.c
> index c983e3a8f09..86fe032dd0b 100644
> --- a/modules/access_output/file.c
> +++ b/modules/access_output/file.c
> @@ -36,6 +36,8 @@
> #include <errno.h>
> #include <sys/stat.h>
> #include <unistd.h>
> +#include <limits.h>
> +#include <string.h>
> #ifdef __OS2__
> # include <io.h> /* setmode() */
> #endif
> @@ -298,6 +300,36 @@ static int Open( vlc_object_t *p_this )
> if (var_GetBool (p_access, SOUT_CFG_PREFIX"sync"))
> flags |= O_SYNC;
> #endif
> +
> +#ifndef NAME_MAX
> + #ifdef (MAX_PATH)
> + #define NAME_MAX MAX_PATH /* win32 */
> + #else
> + #define NAME_MAX 256
> + #endif
> +#endif
> + /* Check if the path need to be truncated */
> + size_t path_len = strlen(path);
> + if (path_len > NAME_MAX)
> + {
> + /* Allocate the buf if needed since p_access->psz_path is const */
> + if (path == p_access->psz_path)
> + {
> + buf = strdup(path);
> + if (!buf)
> + return VLC_ENOMEM;
> + path = buf;
> + }
> +
> + /* Don't loose the extension if any */
> + const char *ext = strrchr(path, '.');
> + size_t ext_len = ext ? strlen(ext) : 0;
> + if (ext && ext_len <= 4)
> + strcpy(&buf[NAME_MAX - ext_len - 1], ext);
> + else
> + buf[NAME_MAX] = 0;
> + }
> +
> do
> {
> fd = vlc_open (path, flags, 0666);
> --
> 2.20.1
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
More information about the vlc-devel
mailing list