PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : lsyncd.c:966: warning: comparison with string literal results in unspecified behavior



403
26-10-2010, 07:34
moins,

an der Stelle steht:



965:#ifdef XML_CONFIG
966- if (opts->conf_filename && opts->conf_filename != DEFAULT_CONF_FILENAME) {
967- s_free(opts->conf_filename);
968- }
969- opts->conf_filename = DEFAULT_CONF_FILENAME;
970-#endif


Ich weiss, dass die Warnung mit dem CFLAG -Wno-address
verschwinden lassen kann, aber das behebt nur das Symptom.

Wie fixt man das richtig?


Gruss

http://nopaste.info/c1d9c99dfc.html

sommerfee
26-10-2010, 08:19
opts->conf_filename != DEFAULT_CONF_FILENAME

durch


strcmp( opts->conf_filename, DEFAULT_CONF_FILENAME ) != 0

ersetzen.

Ganz richtig ist das aber auch nicht, da dann die Zeichenkette nicht freigegeben wird, wenn opts->conf_filename vom User gewollt den gleichen Inhalt hat. Ich finde die Programmierung etwas merkwürdig, man hätte sich keinen Zacken aus der Krone gebrochen, wenn man statt opts->conf_filename = DEFAULT_CONF_FILENAME eine Zuweisung mit Speicheralloziierung gemacht hätte, und dann eben den Speicher hier immer freigibt.

Besser, aber immer noch im Sinne des Erfinders wäre vielleicht:



static const char default_conf_filename[] = DEFAULT_CONF_FILENAME;
...
#ifdef XML_CONFIG
if (opts->conf_filename && opts->conf_filename != default_conf_filename) {
s_free(opts->conf_filename);
}
opts->conf_filename = default_conf_filename;
#endif


Liebe Grüße,
Axel