Compiler warning

  • Danke, damit ist klar, was rein muss und was nicht.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • RHS : Wenn du in ci.c, Zeile 1584 strncpy ebenfalls durch memcpy sollte diese Warnung auch nicht mehr auftauchen. Hier soll kein "C"-String in den Buffer geschrieben werden.

    Damit werden aber immer 256 Byte kopiert, auch wenn Text nur sehr kurz ist. Wobei das freilich kein Fehler wäre, aber unnötig.

    Während der Tausch von strncpy() gegen memcpy() lediglich den Compiler zufriedenstellt, aber keinen Fehler behebt, lauert da aber immer noch ein Problem, wenn Text länger als 256 Byte sein sollte. Dann würde nämlich bei SendData() eine zu große zu kopierende Puffergröße angegeben. Daher schlage ich folgenden Patch vor:

  • Die Länge von struct tIndexPes (64 Bit) ist kleiner als die der struct tIndexTs

    Nein, beide sind exakt gleich groß, nämlich 64 Bit.

    recording.c:2637:52: warning: 'void* memcpy(void*, const void*, size_t)' copying an object of non-trivial type 'struct tIndexTs' from an array of 'struct tIndexPes' [-Wclass-memaccess]
    memcpy(IndexTs, &IndexPes, sizeof(*IndexTs));

    Hier nimmt es der Compiler wohl etwas sehr genau, weil tIndexTs einen Konstruktor hat.

    Na gut, soll er. Aber wenn schon, dann würde ich nach (void *) casten:

    RHS : kannst du bitte verifizieren, ob dieser Patch das Problem auch behebt?

  • Nein, beide sind exakt gleich groß, nämlich 64 Bit.

    Richtig. Ich habe übersehen, das hier Bitfelder definiert werden - die genutzen Bits sind in beiden Fällen 64 Bit.

    Sofern die Bitfelder und die andere Elemente vom Compiler ohne Füllbytes zusammengefügt ist die Größe ident.

    Aber sollte hier nicht zur Sicherheit ein __attribute__ ((__packed__)) oder ähnliches angewendet werden?

    Helmut

  • Mein vdr läuft auf opensuse thumbleweed. Beim letzten update wurde auch der compiler auf 9.1.1

    Code
    1. g++ (SUSE Linux) 9.1.1 20190520 [gcc-9-branch revision 271396]
    2. Copyright (C) 2019 Free Software Foundation, Inc.
    3. This is free software; see the source for copying conditions. There is NO
    4. warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


    hochgezogen. Und schwupps gibt es eine neue Compiler

    Warnung: