Ich habe wohl wieder mal ein Brett vorm Kopf und benötige einen kleinen Denkanstoß.
Ich bekomme obige unschöne Warnung, und kann damit nicht wirklich etwas anfangen. Hier erstmal der zugehörige C-Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | /* ** Minimal check of the filetype ** returns 1 if file is ok, otherwise 0 */ int check_file( FILE * fp ) { /*unsigned*/ char check_buf[16]; int n; n = fread( check_buf, 1, 16, fp ); rewind( fp ); if( n == 16 ) { if( check_buf[0] != 0xFF || check_buf[1] != 0xD8 ) /* SOI, Start Of Image */ return 0; if( check_buf[2] == 0xFF && check_buf[3] == 0xE0 ) { /* APP0 JFIF */ if( strncmp( check_buf + 6, "JFIF", 4 ) == 0 ) return 1; else return 0; } if( check_buf[2] == 0xFF && check_buf[3] == 0xE1 ) { /* APP1 Exif */ if( strncmp( check_buf + 6, "Exif", 4 ) == 0 ) return 1; else return 0; } } return 0; } |
Ich habe diese Funktion gerade in ein uraltes Projekt eingefügt, um einen nervigen Programmfehler zu beseitigen, der allerdings erst durch eine kürzliche Erweiterung auftritt (bisher keine Prüfung ob es wirklich eine JPG Datei ist).
Ich sollte vielleicht noch erwähnen, das der Code per "extern C" in einem C++ Programm mitverwendet wird.
Wenn ich den Puffer als "unsigned char" deklariere, geht zwar die Warnung weg, aber ich bekomme einen neuen Fehler in den Zeilen 17 und 23:
1 | jcomtool.c:383: Fehler: ungültige Umwandlung von »unsigned char*« in »const char*« |
Wie komme ich aus dieser Zwickmühle am elegantesten heraus?
Nachtrag: der Kern des Tools soll auch als eigenständiges Programm vorhanden sein, damit ich es auch in Scripten verwenden kann. Deshalb wollte ich das als C Programm bestehen lassen.