noodles83
12-05-2006, 00:13
ciao! ho fatto una funzione che perņ mi da dei problemi... vorrei sapere dove sbaglio per favore.
la funzione dovrebbe restituire una lista di utenti che sono inseriti all interno di una tabella hash, dove il singolo elemento rapprenseta i dati dell utente: key(nome) e value(un valore).
questa lista va scritta nel buffer della struttura m (m->buffer)
e deve contenere le chiavi presenti nella tabella hash separatate da '\0'.
es: paolo'\0'marco'\0'giulio'\0' e cosi via...
tutti i parametri passati sono allocati e vanno bene. il problema č proprio il codice della funzione.
/* @description -- (comando list) invia la lista degli utenti connessi
@param dati -- puntatore all elemento hash che contiene i dati dell utente client
@param m -- puntatore alla struttura del messaggio da inviare
@returns --
*/
static void list(hashElement_t* dati, message_t* m){
hashElement_t* plist;
int i;
int spazio=0;
char* s;
pthread_mutex_lock(&(stanza->lock));
/*mi trovo lo spazio necessario per contenere le chiavi esistenti*/
for(i=0;i<11;i++){
plist=stanza->table[i];
while(plist!=NULL){
spazio=spazio + strlen(plist->key)+1;
plist=plist->next;
}
}
s=malloc(spazio*sizeof(char));
m->buffer=s;
m->type='L';
for(i=0;i<11;i++){
plist=stanza->table[i];
while(plist!=NULL){
sprintf(s,"%s%c",plist->key,'\0');
s=s+strlen(s)+1;
plist=plist->next;
}
pthread_mutex_unlock(&(stanza->lock));
}
if(sendMessage(dati->value,m)==-1){
fprintf(stderr,"Errore in 'sendMessage'.\n");
exit(EXIT_FAILURE);
}
return;
}
:mc:
la funzione dovrebbe restituire una lista di utenti che sono inseriti all interno di una tabella hash, dove il singolo elemento rapprenseta i dati dell utente: key(nome) e value(un valore).
questa lista va scritta nel buffer della struttura m (m->buffer)
e deve contenere le chiavi presenti nella tabella hash separatate da '\0'.
es: paolo'\0'marco'\0'giulio'\0' e cosi via...
tutti i parametri passati sono allocati e vanno bene. il problema č proprio il codice della funzione.
/* @description -- (comando list) invia la lista degli utenti connessi
@param dati -- puntatore all elemento hash che contiene i dati dell utente client
@param m -- puntatore alla struttura del messaggio da inviare
@returns --
*/
static void list(hashElement_t* dati, message_t* m){
hashElement_t* plist;
int i;
int spazio=0;
char* s;
pthread_mutex_lock(&(stanza->lock));
/*mi trovo lo spazio necessario per contenere le chiavi esistenti*/
for(i=0;i<11;i++){
plist=stanza->table[i];
while(plist!=NULL){
spazio=spazio + strlen(plist->key)+1;
plist=plist->next;
}
}
s=malloc(spazio*sizeof(char));
m->buffer=s;
m->type='L';
for(i=0;i<11;i++){
plist=stanza->table[i];
while(plist!=NULL){
sprintf(s,"%s%c",plist->key,'\0');
s=s+strlen(s)+1;
plist=plist->next;
}
pthread_mutex_unlock(&(stanza->lock));
}
if(sendMessage(dati->value,m)==-1){
fprintf(stderr,"Errore in 'sendMessage'.\n");
exit(EXIT_FAILURE);
}
return;
}
:mc: