> que ce soit iod ou s qui sont descendant de QIODevice, ne supporte pas de void* dans les fonctions writeBlock ou readBlock,
Le language C avec la libc conserve toujours un certain charme :-) ...
fais un man write, open, read, malloc, realloc, free et tu auras un réponse évidente à ton problème. Faut pas faire de l'objet pour faire de l'objet.
Vois aussi que readBlock attent un (char *) et non un (char **). Donc la fonction ne fait pas de malloc ! Danger !
Si la fonction attend un (char *), elle a tord. Désolé. C'est de la programmation des années 70. Face à ça, faire un cast de (void *) à (char *) n'est pas dramatique. Il n'y a pas de conversion, c'est pour virer un warning du compilo.
voilà le proto de read() qui est posix :
ssize_t read(int fd, void *buf, size_t count);
(void *) pour les data. (size_t) pour la taille.
Tu peux te permètres un cast.
#include <stdio.h>
struct {
void * data ;
size_t size ; // pas int. C'est pas un nombre c'est une taille !
} img ;
img.size= iod.size();
if ((img.data=malloc(img.size)) == NULL) {
perror(NULL) ;
exit(EXIT_FAILURE)
}
iod.readBlock((char *)img.data,img.size);
QTextStream ts(s);
QString imgstr=QString("Content-type: image/%1\n\r").arg(imgformat)+QString("Content-length: %1\n\r").arg(img.size)+QString("Accept-Ranges: bytes\n\n");
ts<<imgstr;
ts.unsetDevice();
s->writeBlock((char *)img.data, img.size);
iod.close();
s->close();
free(img.data);
}
[^] # Re: petite question sur les transfert dans le protocole http
Posté par matiasf . En réponse au journal petite question sur les transfert dans le protocole http. Évalué à 7.