Le perjantaina 28. huhtikuuta 2023, 12.55.01 EEST Nicolas George a écrit : > Signed-off-by: Nicolas George <geo...@nsup.org> > --- > libavutil/extendable.h | 59 ++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 59 insertions(+) > create mode 100644 libavutil/extendable.h > > > FFReservedPadding is used by the WIP JSON writer.
A JSON writer that requires forced alignment is a poorly-written JSON parser. JSON has a very finite set of types that it can handle, so there should never be a need to do this kind of pointer arithmetic kludgery. > diff --git a/libavutil/extendable.h b/libavutil/extendable.h > new file mode 100644 > index 0000000000..79980fa202 > --- /dev/null > +++ b/libavutil/extendable.h > @@ -0,0 +1,59 @@ > +/* > + * Copyright (c) 2021 The FFmpeg project > + * > + * This file is part of FFmpeg. > + * > + * FFmpeg is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; either > + * version 2.1 of the License, or (at your option) any later version. > + * > + * FFmpeg is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with FFmpeg; if not, write to the Free Software > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 > USA + */ > + > +#ifndef AVUTIL_EXTENDABLE_H > +#define AVUTIL_EXTENDABLE_H > + > +/** > + * @defgroup ff_extendable FFExtendable > + * > + * Types and macros to help designing structures that can be allocated by > + * the application, including on the stack, but will not break ABI when > + * extendded. > + * > + * This should not be used outside FFmpeg. > + * > + * @{ > + */ > + > +/** > + * Define a value of type as a compound literal (hidden local variable) > + * with the field self_size filled. > + */ > +#define FF_NEW_SZ(type) ((type){ .self_size = sizeof(type) }) > + > +/** > + * Type suitable for paddign at the end of a structure, with maximum > + * alignment. > + */ > +typedef union FFReservedPadding { > + union { > + double d; > + void *p; > + void (*f)(void); > + intmax_t i; > + } dummy; > +} FFReservedPadding; This is reinventing standard max_align_t but with a more confusing name and less portable implementation... Indeed this is not about "padding", but about alignment. > + > +/** > + * @} > + */ > + > +#endif /* AVUTIL_EXTENDABLE_H */ -- 雷米‧德尼-库尔蒙 http://www.remlab.net/ _______________________________________________ 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".