[vlc-devel] [PATCH 0/3] Respect C++ ODR (first patches)

Romain Vimont rom1v at videolabs.io
Sun Apr 22 17:03:35 CEST 2018


In C++, there cannot be more than one definition of a single type in the
entire program:
<http://en.cppreference.com/w/cpp/language/definition#One_Definition_Rule>

This has been reported by #17078 and #18033.

To fix the issue:
 1. In C++ code, declare *_sys_t types in a separate namespace, either
    unnamed if it's used only in one translation unit, or named otherwise.
 2. Remove the *_sys_t typedefs in include/vlc_common.h.
 3. Declare *_sys_t typedefs locally for C modules.
 4. Declare references to private data as "void *" instead of "*_sys_t *".
 5. Adapt code that now dereferences "void *" or relied on the *_sys_t
    forward declarations.

There are 16 *_sys_t types (in include/vlc_common.h). I suggest to
create one patch per type.

Here are the first 3 to illustrate the changes I suggest. I'm waiting
for your feedbacks to work on the 13 remaining types.

Romain Vimont (3):
  core: respect ODR for demux_sys_t
  core: respect ODR for services_discovery_sys_t
  core: respect ODR for access_sys_t

 include/vlc_common.h                          |  3 --
 include/vlc_services_discovery.h              |  2 +-
 modules/access/alsa.c                         |  4 +-
 modules/access/attachment.c                   |  4 +-
 modules/access/avio.c                         |  4 +-
 modules/access/bluray.c                       |  4 +-
 modules/access/cdda.c                         |  8 ++--
 modules/access/concat.c                       |  4 +-
 modules/access/dc1394.c                       |  4 +-
 modules/access/dcp/dcp.cpp                    |  2 +
 modules/access/decklink.cpp                   |  2 +
 modules/access/directory.c                    |  4 +-
 modules/access/dshow/access.h                 | 37 ++++++++--------
 modules/access/dsm/sd.c                       |  4 +-
 modules/access/dtv/access.c                   |  4 +-
 modules/access/dv.c                           |  4 +-
 modules/access/dvb/access.c                   |  4 +-
 modules/access/dvdnav.c                       |  4 +-
 modules/access/dvdread.c                      |  4 +-
 modules/access/file.c                         |  4 +-
 modules/access/ftp.c                          |  2 +
 modules/access/http.c                         |  4 +-
 modules/access/http/access.c                  |  4 +-
 modules/access/idummy.c                       |  4 +-
 modules/access/imem-access.c                  |  4 +-
 modules/access/imem.c                         |  4 +-
 modules/access/jack.c                         |  4 +-
 modules/access/linsys/linsys_hdsdi.c          |  4 +-
 modules/access/linsys/linsys_sdi.c            |  4 +-
 modules/access/live555.cpp                    |  3 +-
 modules/access/mms/mms.c                      |  4 +-
 modules/access/mms/mmsh.h                     |  4 +-
 modules/access/mms/mmstu.h                    |  4 +-
 modules/access/nfs.c                          |  4 +-
 modules/access/oss.c                          |  4 +-
 modules/access/pulse.c                        |  4 +-
 modules/access/rdp.c                          |  4 +-
 modules/access/rtp/rtp.h                      |  4 +-
 modules/access/samba.c                        |  4 +-
 modules/access/satip.c                        |  5 ++-
 modules/access/screen/screen.h                |  4 +-
 modules/access/screen/wayland.c               |  4 +-
 modules/access/screen/xcb.c                   |  4 +-
 modules/access/sftp.c                         |  4 +-
 modules/access/shm.c                          |  2 +
 modules/access/timecode.c                     |  4 +-
 modules/access/udp.c                          |  4 +-
 modules/access/v4l2/access.c                  |  4 +-
 modules/access/v4l2/demux.c                   |  4 +-
 modules/access/v4l2/radio.c                   |  4 +-
 modules/access/vcd/vcd.c                      |  4 +-
 modules/access/vdr.c                          |  4 +-
 modules/access/vnc.c                          |  4 +-
 modules/access/wasapi.c                       |  4 +-
 modules/demux/adaptive/adaptive.cpp           |  2 +-
 modules/demux/aiff.c                          |  4 +-
 modules/demux/asf/asf.c                       |  4 +-
 modules/demux/au.c                            |  4 +-
 modules/demux/avformat/demux.c                |  4 +-
 modules/demux/avi/avi.c                       |  4 +-
 modules/demux/caf.c                           |  4 +-
 modules/demux/cdg.c                           |  4 +-
 modules/demux/flac.c                          |  4 +-
 modules/demux/gme.c                           |  4 +-
 modules/demux/image.c                         |  4 +-
 modules/demux/mjpeg.c                         |  4 +-
 modules/demux/mkv/Ebml_parser.cpp             |  3 ++
 modules/demux/mkv/Ebml_parser.hpp             |  4 ++
 modules/demux/mkv/chapter_command.cpp         |  5 ++-
 modules/demux/mkv/chapter_command.hpp         | 10 ++---
 modules/demux/mkv/chapters.cpp                |  3 ++
 modules/demux/mkv/chapters.hpp                |  4 ++
 modules/demux/mkv/demux.cpp                   |  3 ++
 modules/demux/mkv/demux.hpp                   |  3 ++
 modules/demux/mkv/matroska_segment.cpp        |  4 ++
 modules/demux/mkv/matroska_segment.hpp        |  4 ++
 modules/demux/mkv/matroska_segment_parse.cpp  |  4 ++
 modules/demux/mkv/matroska_segment_seeker.cpp |  3 ++
 modules/demux/mkv/matroska_segment_seeker.hpp |  4 ++
 modules/demux/mkv/mkv.cpp                     |  8 +++-
 modules/demux/mkv/mkv.hpp                     |  3 ++
 modules/demux/mkv/stream_io_callback.cpp      |  3 ++
 modules/demux/mkv/stream_io_callback.hpp      |  3 ++
 modules/demux/mkv/util.cpp                    |  4 ++
 modules/demux/mkv/util.hpp                    |  4 ++
 modules/demux/mkv/virtual_segment.cpp         |  4 ++
 modules/demux/mkv/virtual_segment.hpp         |  4 ++
 modules/demux/mod.c                           |  4 +-
 modules/demux/mp4/mp4.c                       |  4 +-
 modules/demux/mpc.c                           |  4 +-
 modules/demux/mpeg/es.c                       |  4 +-
 modules/demux/mpeg/h26x.c                     |  4 +-
 modules/demux/mpeg/mpgv.c                     |  4 +-
 modules/demux/mpeg/ps.c                       |  4 +-
 modules/demux/mpeg/ts_pid.h                   |  2 +
 modules/demux/nsv.c                           |  4 +-
 modules/demux/nuv.c                           |  4 +-
 modules/demux/ogg.h                           |  4 +-
 modules/demux/playlist/sgimb.c                |  4 +-
 modules/demux/pva.c                           |  4 +-
 modules/demux/rawaud.c                        |  4 +-
 modules/demux/rawdv.c                         |  4 +-
 modules/demux/rawvid.c                        |  4 +-
 modules/demux/real.c                          |  4 +-
 modules/demux/sid.cpp                         | 17 ++++----
 modules/demux/smf.c                           |  4 +-
 modules/demux/stl.c                           |  5 ++-
 modules/demux/subtitle.c                      |  4 +-
 modules/demux/tta.c                           |  4 +-
 modules/demux/ttml.c                          |  4 +-
 modules/demux/ty.c                            |  4 +-
 modules/demux/vc1.c                           |  4 +-
 modules/demux/vobsub.c                        |  4 +-
 modules/demux/voc.c                           |  4 +-
 modules/demux/wav.c                           |  4 +-
 modules/demux/webvtt.c                        |  4 +-
 modules/demux/xa.c                            |  4 +-
 modules/lua/services_discovery.c              |  4 +-
 modules/misc/stats.c                          |  4 +-
 modules/services_discovery/avahi.c            |  4 +-
 modules/services_discovery/mediadirs.c        |  4 +-
 modules/services_discovery/microdns.c         | 25 ++++++-----
 modules/services_discovery/mtp.c              | 43 +++++++++++--------
 modules/services_discovery/podcast.c          | 16 +++----
 modules/services_discovery/pulse.c            |  4 +-
 modules/services_discovery/sap.c              | 41 ++++++++++--------
 modules/services_discovery/udev.c             |  4 +-
 modules/services_discovery/upnp.cpp           |  6 ++-
 modules/services_discovery/xcb_apps.c         |  4 +-
 .../chromecast/chromecast_demux.cpp           |  1 -
 130 files changed, 383 insertions(+), 284 deletions(-)

-- 
2.17.0



More information about the vlc-devel mailing list