Moin Christoph,
na, *das* nenne ich doch mal eine 'konstruktive Kritik' -- danke!
Zeile 0: bitte noch ein #include <unistd.h> einbauen (für getpid(),
unlink() und close())
Hm, bisher dachte ich, das waere in der stdlib.h definiert -- danke fuer den
Hinweis.
(Zeile 44 ff: der alte Macteiler ist IMHO ':', wenn's gebraucht werden
sollte)
Ich habe keinen Mac zum testen. Da muesste sich ein Mac-Freak hinsetzen und
das patchen.
Zeilen 86, 89 und Funktionen: Bitte alle globalen Variablen vermeiden. Auch
hier.Auch die Funktionen selber!
Jaja, ich weiss. Ich hatte eh vor, fuer V. 1.0 das Log-Konzept komplett zu
ueberarbeiten.
Zeile 102: Der Name 'log(const char *format, ...)' der Funktion beißt sich
mit log(double) aus der math.h. Würde ich zu vermeiden suchen.
Danke.
Zeile 204: mkdir() kann auch in die Hose gehen, fehlt Überprüfung.
Stimmt. Daraus wollte ich eh noch ein
if(ret && errno != EEXIST) {
perror("mkdir");
return -1;
}
machen, habe es aber vergessen.
Zeile 234: malloc() ohne Überprüfung? Ganz böse Falle, aber wirklich _ganz_
böse!
Find ich gar nicht. Wann sollte *heutzutage* noch ein malloc() fehlschlagen,
gerade wenn es nur um ein paar Bytes geht?
und weder strcpy() noch strcat() sind eigentlich zu empfehlen.
Warum?
Zeile 253: Überprüfung von fclose() fehlt.
Danke, guter Punkt! :-)
Zeile 271: Memory Leak! gz ist noch nicht freigegeben vor dem return!
Bitte wie? 'gz' sollte doch fclose() freigeben, ich habe den Speicher
schliesslich nicht angefordert. Und ich habe noch keinen Sourcecode gesehen,
wo ein FILE * freigegeben wird.
Zeile 343: sowas geht nicht gut. Hau lieber noch ein paar Klammern drumherum.
if ((gzip = strstr(gzip, "gzip"))) {
Noajoa, es waere gut gegangen. Aber -pedantic will halt noch eine Klammer
haben...
Zeile 348: *gzip != 0 passt nicht. Die Stelle auf die der Pointer zeigt
ist Type char, 0 ist Type int.
Zum Glueck weiss der Compiler das auch und macht daraus einen char :-)
Zeile 390, 403: getenv("PATH_INFO") kann NULL zurückgeben, das kollidiert
dann mit Deiner log() Funktion.
Danke, guter Hinweis.
Zeile 443, 450, 458, 525, 532, 540: tptr kann NULL sein, verträgt sich mit
strftime() nicht.
Hm. Warum sollte tptr null sein koennen? Bzw. in welchem Fall? Aber ich habe
es beruecksichtigt jetzt, danke.
Zeile 599: close() will als erstes Argument ein int, bekommt aber eine FILE*
Beschwert sich übrigens auch der GCC drüber!
Aber hast Du wahrscheinlich nicht verstanden, oder?
Doch, natuerlich ;-) Ich habe nur nicht mit -Wall compiliert, zum Schluss. Das
mit der 'filename.conf' war mehr oder weniger ein Release-Quickhack, damit
ich bei den Binaries nicht den Cache-Pfad fest einkompilieren muss.
Gut, zugegeben ist ein wenig kryptisch die Meldung ;-)
Ja, aber nach ein paar Programmen lernt man die Meldung einschaetzen ;-)
Wolltest Du evt fclose()? Hast zumindest fopen() genommen.
Ja, wollte ich.
Typo?
Genau :-)
Zeile 632: may_gzip() ist weder bool noch int.
Doch, may_gzip() ist
int may_gzip(void)
Nach Reparatur von 343 und 599 hat
gcc -Wall -pedantic -ansi gzip\_cncc.c -lz
gar keine Beschwerden mehr.
Dito.
Ich kannte -pedantic und -ansi vorher gar nicht. -Wall sind anscheinend doch
nicht alle Warnungen?
Gruesse,
CK