From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 495424F131 for ; Fri, 16 May 2025 23:11:00 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 99F9F68CEB9; Sat, 17 May 2025 02:10:57 +0300 (EEST) Received: from iq.passwd.hu (iq.passwd.hu [217.27.212.140]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 8750568C3CE for ; Sat, 17 May 2025 02:10:51 +0300 (EEST) Received: from localhost (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id 0CCBFE16C7; Sat, 17 May 2025 01:07:32 +0200 (CEST) X-Virus-Scanned: amavisd-new at passwd.hu Received: from iq.passwd.hu ([127.0.0.1]) by localhost (iq.passwd.hu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 6uclIZw_KbUr; Sat, 17 May 2025 01:07:30 +0200 (CEST) Received: from bluegene.passwd.hu (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id 4B766E1167; Sat, 17 May 2025 01:07:30 +0200 (CEST) From: Marton Balint To: ffmpeg-devel@ffmpeg.org Date: Sat, 17 May 2025 01:08:58 +0200 Message-ID: <20250516231041.4640-1-cus@passwd.hu> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/4] fftools/cmdutils: allow arbitrary length paths for preset files X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Marton Balint Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Signed-off-by: Marton Balint --- fftools/cmdutils.c | 17 ++++++++++------- fftools/cmdutils.h | 4 ++-- fftools/ffmpeg_opt.c | 14 +++++++++----- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/fftools/cmdutils.c b/fftools/cmdutils.c index be21ed2c6c..e516ee6ebd 100644 --- a/fftools/cmdutils.c +++ b/fftools/cmdutils.c @@ -920,7 +920,7 @@ int read_yesno(void) return yesno; } -FILE *get_preset_file(char *filename, size_t filename_size, +FILE *get_preset_file(AVBPrint *filename, const char *preset_name, int is_path, const char *codec_name) { @@ -936,8 +936,9 @@ FILE *get_preset_file(char *filename, size_t filename_size, FFMPEG_DATADIR, }; if (is_path) { - av_strlcpy(filename, preset_name, filename_size); - f = fopen_utf8(filename, "r"); + av_bprintf(filename, "%s", preset_name); + if (av_bprint_is_complete(filename)) + f = fopen_utf8(filename->str, "r"); } else { #if HAVE_GETMODULEHANDLE && defined(_WIN32) wchar_t *datadir_w = get_module_filename(NULL); @@ -971,15 +972,17 @@ FILE *get_preset_file(char *filename, size_t filename_size, for (i = 0; i < 3 && !f; i++) { if (!base[i]) continue; - snprintf(filename, filename_size, "%s%s/%s.ffpreset", base[i], + av_bprint_clear(filename); + av_bprintf(filename, "%s%s/%s.ffpreset", base[i], i != 1 ? "" : "/.ffmpeg", preset_name); - f = fopen_utf8(filename, "r"); + f = fopen_utf8(filename->str, "r"); if (!f && codec_name) { - snprintf(filename, filename_size, + av_bprint_clear(filename); + av_bprintf(filename, "%s%s/%s-%s.ffpreset", base[i], i != 1 ? "" : "/.ffmpeg", codec_name, preset_name); - f = fopen_utf8(filename, "r"); + f = fopen_utf8(filename->str, "r"); } } } diff --git a/fftools/cmdutils.h b/fftools/cmdutils.h index ad020f893a..216a2bcfe7 100644 --- a/fftools/cmdutils.h +++ b/fftools/cmdutils.h @@ -28,6 +28,7 @@ #include "libavcodec/avcodec.h" #include "libavfilter/avfilter.h" #include "libavformat/avformat.h" +#include "libavutil/bprint.h" #include "libswscale/swscale.h" #ifdef _WIN32 @@ -495,13 +496,12 @@ int read_yesno(void); * codec_name-preset_name.avpreset in the above-mentioned directories. * * @param filename buffer where the name of the found filename is written - * @param filename_size size in bytes of the filename buffer * @param preset_name name of the preset to search * @param is_path tell if preset_name is a filename path * @param codec_name name of the codec for which to look for the * preset, may be NULL */ -FILE *get_preset_file(char *filename, size_t filename_size, +FILE *get_preset_file(AVBPrint *filename, const char *preset_name, int is_path, const char *codec_name); /** diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index 3d1efe32f9..aafacb8f1c 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -42,6 +42,7 @@ #include "libavutil/avassert.h" #include "libavutil/avstring.h" #include "libavutil/avutil.h" +#include "libavutil/bprint.h" #include "libavutil/mathematics.h" #include "libavutil/mem.h" #include "libavutil/opt.h" @@ -1017,13 +1018,15 @@ static int opt_preset(void *optctx, const char *opt, const char *arg) { OptionsContext *o = optctx; FILE *f=NULL; - char filename[1000], line[1000], tmp_line[1000]; + char line[1000], tmp_line[1000]; + AVBPrint filename; const char *codec_name = NULL; int ret = 0; codec_name = opt_match_per_type_str(&o->codec_names, *opt); + av_bprint_init(&filename, 0, AV_BPRINT_SIZE_UNLIMITED); - if (!(f = get_preset_file(filename, sizeof(filename), arg, *opt == 'f', codec_name))) { + if (!(f = get_preset_file(&filename, arg, *opt == 'f', codec_name))) { if(!strncmp(arg, "libx264-lossless", strlen("libx264-lossless"))){ av_log(NULL, AV_LOG_FATAL, "Please use -preset -qp 0\n"); }else @@ -1039,11 +1042,11 @@ static int opt_preset(void *optctx, const char *opt, const char *arg) av_strlcpy(tmp_line, line, sizeof(tmp_line)); if (!av_strtok(key, "=", &value) || !av_strtok(value, "\r\n", &endptr)) { - av_log(NULL, AV_LOG_FATAL, "%s: Invalid syntax: '%s'\n", filename, line); + av_log(NULL, AV_LOG_FATAL, "%s: Invalid syntax: '%s'\n", filename.str, line); ret = AVERROR(EINVAL); goto fail; } - av_log(NULL, AV_LOG_DEBUG, "ffpreset[%s]: set '%s' = '%s'\n", filename, key, value); + av_log(NULL, AV_LOG_DEBUG, "ffpreset[%s]: set '%s' = '%s'\n", filename.str, key, value); if (!strcmp(key, "acodec")) opt_audio_codec (o, key, value); else if (!strcmp(key, "vcodec")) opt_video_codec (o, key, value); @@ -1051,7 +1054,7 @@ static int opt_preset(void *optctx, const char *opt, const char *arg) else if (!strcmp(key, "dcodec")) opt_data_codec (o, key, value); else if (opt_default_new(o, key, value) < 0) { av_log(NULL, AV_LOG_FATAL, "%s: Invalid option or argument: '%s', parsed as '%s' = '%s'\n", - filename, line, key, value); + filename.str, line, key, value); ret = AVERROR(EINVAL); goto fail; } @@ -1059,6 +1062,7 @@ static int opt_preset(void *optctx, const char *opt, const char *arg) fail: fclose(f); + av_bprint_finalize(&filename, NULL); return ret; } -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".