Re: strnstr
Inviato: mar 30 set 2008, 23:12
Aggiungendo direttamente la funzione tra i sorgenti la compilazione va a buon fine. Allego la patch :)
L'avevo già fatto questo, con due funzioni distinte, una che ho postato ed una presa direttamente dalle libc di freebsd. Così come chiamare la funzione detta da Mario.Dani ha scritto:Aggiungendo direttamente la funzione tra i sorgenti la compilazione va a buon fine. Allego la patch
Codice: Seleziona tutto
char *
strnstr(s, find, slen)
const char *s;
const char *find;
size_t slen;
{
char c, sc;
size_t len;
if ((c = *find++) != '\0') {
len = strlen(find);
do {
do {
if (slen-- < 1 || (sc = *s++) == '\0')
return (NULL);
} while (sc != c);
if (len > slen)
return (NULL);
} while (strncmp(s, find, len) != 0);
s--;
}
return ((char *)s);
}
Usando la macro __DECONST effettui tre cast, in questo caso la funzione strnstr ritornernà ((char *)(uintptr_t)(const void *)(s)). Presumo che questo sia necessario in quanto s è const char* mentre la funzione è di tipo char*, ma effettivamente anche usando un semplice cast char* la compilazione termina con successoconraid ha scritto: Alla fine sono la stessa cosa?
Se è un problema di compilazione come ho scritto va a buon termine anche usando strncasecmp o mettendo la prima funzione che ho postato, presa da un vecchio bfi, quindi va capito se al programma va bene lo stesso o no.Dani ha scritto:Usando la macro __DECONST effettui tre cast, in questo caso la funzione strnstr ritornernà ((char *)(uintptr_t)(const void *)(s)). Presumo che questo sia necessario in quanto s è const char* mentre la funzione è di tipo char*, ma effettivamente anche usando un semplice cast char* la compilazione termina con successoconraid ha scritto: Alla fine sono la stessa cosa?
Codice: Seleziona tutto
dani[dnsscan-1.0]$ egrep "str.str" *.{c,h}
dnsreader.c: if (strnstr((char *)body, search_string, bodylen) == 0) {
dani[dnsscan-1.0]$
è quello che gli ho detto io, ma lui ha risposto che c'èDani ha scritto:Non ti conviene sostituire strnstr con strncasecmp, non sono la stessa cosa e se il programmatore ha usato una piuttosto che l'altra un motivo ci sarà.
Comunque non c'è nessuna strnstr nei sorgenti, l'autore del programma si deve essere sbagliato:Codice: Seleziona tutto
dani[dnsscan-1.0]$ egrep "str.str" *.{c,h} dnsreader.c: if (strnstr((char *)body, search_string, bodylen) == 0) { dani[dnsscan-1.0]$
Grazie Corrado,conraid ha scritto:Ci sono anche qui su slacky questi pacchetti Mario, quel che dici si trova in libdnet che come sorgenti è qui http://libdnet.sourceforge.net/
Per current ci sono su slackers.it
Lo so, io ho iniziato a fare i tgz da poco, prima per il software che usavo spesso e potevo ricompilare (mettermi a ricompilare kde non mi ci sono mai messo tanto per dire) facevo anche io così. mutt, postfix, etc...Mario Vanoni ha scritto:Grazie Corrado,conraid ha scritto:Ci sono anche qui su slacky questi pacchetti Mario, quel che dici si trova in libdnet che come sorgenti è qui http://libdnet.sourceforge.net/
Per current ci sono su slackers.it
installato libevent e sscanssh
make stesso errore tuo, strnstr che manca
PS Non amo molto i *.tgz
>> preferisco ./configure --help | less
>> per vedere le alternative, se esistono, poi
>> e.g. --prefix=/usr --disable-nls CFLAGS='-O2 -s -static''
>> gusti diversi ...