[Fli4l_dev] mkfli4l.sh --rebuild

Alexander Dahl lespocky at web.de
Sa Feb 15 17:55:37 CET 2020


Moin Gerd,

ich habe gerade den Progammcode nicht vor mir. Hast Du einen kleinen
Hinweis, wo man den findet?

Gerd Walter schrieb Freitag, 14. Februar 2020, 22:42 (CET):
> Am 29.06.19 um 13:13 schrieb Gerd Walter:
>> Hallo,
>> 
>> Ich habe ein Problem unter Alpine Linux um mkfli4l laufen zu lassen.
>> Beim --rebuild bricht er mit folgenden Fehler ab.
>> 
>>    CC     libmkfli4l/parse.o
>> libmkfli4l/parse.c: In function 'parse_rewrite_string':
>> libmkfli4l/parse.c:598:17: error: this statement may fall through 
>> [-Werror=implicit-fallthrough=]
>>                   switch (*(msg + 1)) {
>>                   ^~~~~~
>> libmkfli4l/parse.c:606:9: note: here
>>           default:
>>           ^~~~~~~
>> cc1: all warnings being treated as errors
>> make[1]: *** [Makefile:288: libmkfli4l/parse.o] Error 1
>> mkmkfli4l.sh: Error: Build failed!
>> make: *** [Makefile:38: all] Error 2
>> make: Leaving directory '/home/fli/fli4l-4.0.0-r57892-testing/src'
>> Failed to (re)build mkfli4l (error code 0): cannot continue, aborting...
>> An error occurred while creating fli4l-files.
>> =============================================
>> Failed to (re)build mkfli4l (error code 0): cannot continue, aborting...
>> buildfli:~/fli4l-4.0.0-r57892-testing$
>
>
> Den Fehler kann man beseitigen wenn die Zeile 604
>
>     /* fall through */
>
> aus der else-Anweisung um eine Zeile nach unten geschoben wird.

Da sollte natürlich drauf geachtet werden, dass das die Programmlogik
nicht ändert.

>
>
>
> Jetzt bleibe ich bei folgenden Fehler hängen:
>
>    CC     config.o
>    CC     buildinfo.o
> buildinfo.c: In function 'create_build_info':
> buildinfo.c:77:26: error: '%02d' directive writing between 2 and 11 
> bytes into a region of size between 0 and 10 [-Werror=format-overflow=]
>     77 |     sprintf(datestr, "%d-%02d-%02d", tm->tm_year + 1900, 
> tm->tm_mon + 1, tm->tm_mday);
>        |                          ^~~~
> buildinfo.c:77:22: note: directive argument in the range [-2147483647, 
> 2147483647]
>     77 |     sprintf(datestr, "%d-%02d-%02d", tm->tm_year + 1900, 
> tm->tm_mon + 1, tm->tm_mday);
>        |                      ^~~~~~~~~~~~~~
> buildinfo.c:77:5: note: 'sprintf' output between 8 and 36 bytes into a 
> destination of size 12
>     77 |     sprintf(datestr, "%d-%02d-%02d", tm->tm_year + 1900, 
> tm->tm_mon + 1, tm->tm_mday);
>        | 
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> cc1: all warnings being treated as errors
> make[1]: *** [Makefile:288: buildinfo.o] Error 1
> mkmkfli4l.sh: Error: Build failed!
> make: *** [Makefile:38: all] Error 2
> make: Leaving directory '/home/fli/fli4l-4.0.0-r57892-testing/src'
> Failed to (re)build mkfli4l (error code 0): cannot continue, aborting...
> An error occurred while creating fli4l-files.
>=============================================
> Failed to (re)build mkfli4l (error code 0): cannot continue, aborting...
>
>

Der Compiler kann hier vermutlich nicht so weit analysieren, dass er
mitbekommt, dass real nur max. vierstellige Werte auftreten können. Die
einfache variante wäre hier statt sprintf besser snprintf zu nehmen
(grundsätzlich sinnvoll). Im ganz konkreten Fall wäre aber vermutlich
sogar strftime (?) besser geeignet?

Grüße
Alex

-- 
***** http://blog.antiblau.de/ *****************************
GnuPG-FP: C28E E6B9 0263 95CF 8FAF  08FA 34AD CD00 7221 5CC6


Mehr Informationen über die Mailingliste Fli4l_dev