> -----Original Message----- > From: Martin Storsjö <mar...@martin.st> > Sent: Tuesday, May 24, 2022 11:23 AM > To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> > Cc: softworkz <softwo...@hotmail.com>; Hendrik Leppkes > <h.lepp...@gmail.com> > Subject: Re: [FFmpeg-devel] [PATCH v5 2/2] avformat/os_support: Support > long file names on Windows > > On Tue, 24 May 2022, softworkz wrote: > > > From: softworkz <softwo...@hotmail.com> > > > > Signed-off-by: softworkz <softwo...@hotmail.com> > > --- > > libavformat/os_support.h | 16 +++++++++++----- > > 1 file changed, 11 insertions(+), 5 deletions(-) > > > > diff --git a/libavformat/os_support.h b/libavformat/os_support.h > > index 5e6b32d2dc..d4c07803a5 100644 > > --- a/libavformat/os_support.h > > +++ b/libavformat/os_support.h > > @@ -49,7 +49,13 @@ > > # ifdef stat > > # undef stat > > # endif > > -# define stat _stati64 > > +# define stat win32_stat > > + > > + struct win32_stat > > + { > > + struct _stati64; > > + }; > > Is it possible to work around this issue by doing "#define stat(a,b)" > which only should apply on the function, not to the struct?
How could this be possible? A define is only doing string replacements, so I wouldn't know how it could be restricted to the function, but not the struct. > A safe way forward could be to switch code to just using "struct > ff_stat_struct", and define ff_stat_struct to the name of the struct we > exepct to use. It's not pretty, and it affects users which no longer can > use the default POSIX stat form of the calls That's why I took the effort to make this work. > but it would fix the issue > of redirecting the struct and function separately, without needing to know > what exactly is in the struct (because we really shouldn't be > hardcoding/assuming that). That doesn't apply because the current code already does this: DEF_FS_FUNCTION2(stat, _wstati64, _stati64, struct stat*) Which means that it specifically chooses _stati64 which is a public MS API: https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/stat-functions?view=msvc-170 And we know that it takes _stati64 as the parameter. This code: struct win32_stat { struct _stati64; }; makes use of a MS compiler feature called "anonymous structures": https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2013/z2cx9y4f(v=vs.120)?redirectedfrom=MSDN This way, we automatically "inherit" the members of the struct (whatever their members would be). Thanks for reviewing, softworkz _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".