Index: ../ircu2.10.06/ircd/s_debug.c =================================================================== RCS file: /usr/local/cvsroot/ircu2.10.06/ircd/s_debug.c,v retrieving revision 1.10 retrieving revision 1.11 diff -c -r1.10 -r1.11 *** ../ircu2.10.06/ircd/s_debug.c 1999/10/07 19:44:23 1.10 --- ../ircu2.10.06/ircd/s_debug.c 1999/10/07 20:11:15 1.11 *************** *** 191,197 **** '-', #endif #endif ! 'D','B','1','9', #ifdef DB_ESNET '+', #else --- 191,197 ---- '-', #endif #endif ! 'D','B','2','0', #ifdef DB_ESNET '+', #else Index: ../ircu2.10.06/ircd/s_serv.c =================================================================== RCS file: /usr/local/cvsroot/ircu2.10.06/ircd/s_serv.c,v retrieving revision 1.10 retrieving revision 1.14 diff -c -r1.10 -r1.14 *** ../ircu2.10.06/ircd/s_serv.c 1999/10/07 19:44:24 1.10 --- ../ircu2.10.06/ircd/s_serv.c 1999/10/07 23:02:08 1.14 *************** *** 27,32 **** --- 27,33 ---- #if defined(DB_ESNET) || defined(DB_HISPANO) #include #include + #include #include #endif *************** *** 1582,1587 **** --- 1583,1664 ---- } /* + ** db_pack + ** + ** Elimina los registro superfluos + ** de una Base de Datos Local. + ** + ** Se invoca cuando re recibe un CheckPoint, y el + ** formato es "serie destino id * texto" + */ + void db_pack(char *registro,char que_bdd) + { + int db_file; + char buf[1024],path[1024]; + char *map; + char *lectura,*escritura,*p; + char *clave,*valor; + char c; + unsigned long len,len2; + struct stat estado; + struct dbh_reg *reg; + + /* + ** El primer valor es el numero de serie actual + */ + tabla_serie[que_bdd]=atol(registro); + + sprintf_irc(path,"%s/tabla.%c",DBPATH,que_bdd); + alarm(3); + db_file=open(path,O_RDWR | O_APPEND | O_CREAT, S_IRUSR | S_IWUSR); + fstat(db_file,&estado); + len=estado.st_size; + map=mmap(NULL,len,PROT_READ | PROT_WRITE, + MAP_SHARED | MAP_NORESERVE,db_file,0); + alarm(0); + + p=lectura=escritura=map; + while(lecturavalor); + if((valor+len2==p)&& + (!strncmp(valor,reg->valor,len2))) { /* !!El mismo!! */ + while((pname,parv[4],que_bdd); --- 1811,1821 ---- */ collapse(parv[1]); if(!match(parv[1],me.name)) { sprintf_irc(path,"%s/tabla.%c",DBPATH,que_bdd); + alarm(3); db_file=open(path,O_TRUNC,S_IRUSR | S_IWUSR); close(db_file); + alarm(0); borrar_db(que_bdd); sendto_one(sptr,"%s DB %s 0 E %s %c\n", NumServ(&me),sptr->name,parv[4],que_bdd); *************** *** 1824,1836 **** if(!es_hub) return 0; if(parc==5) - sprintf_irc(db_buf,"%lu %s %s %s",parv[2],parv[1],parv[3],parv[4]); - else - sprintf_irc(db_buf,"%lu %s %s %s %s",parv[2],parv[1],parv[3],parv[4],parv[5]); - - db_alta(db_buf,que_bdd); - - if(parc==5) sprintf_irc(db_buf,"%s DB %s %lu %s %s", NumServ(sptr),parv[1],parv[2],parv[3],parv[4]); else --- 1902,1907 ---- *************** *** 1844,1853 **** sendto_one(lp->value.cptr,db_buf); } - tabla_serie[que_bdd]=db; - - alarm(3); sprintf_irc(path,"%s/tabla.%c",DBPATH,que_bdd); db_file=open(path,O_WRONLY | O_APPEND | O_CREAT, S_IRUSR | S_IWUSR); alarm(0); --- 1915,1922 ---- sendto_one(lp->value.cptr,db_buf); } sprintf_irc(path,"%s/tabla.%c",DBPATH,que_bdd); + alarm(3); db_file=open(path,O_WRONLY | O_APPEND | O_CREAT, S_IRUSR | S_IWUSR); alarm(0); *************** *** 1856,1866 **** else sprintf_irc(db_buf,"%lu %s %s %s %s\n",db,parv[1],parv[3],parv[4],parv[5]); alarm(3); ! write(db_file,db_buf,strlen(db_buf)); alarm(0); ! close(db_file); return 0; } --- 1925,1939 ---- else sprintf_irc(db_buf,"%lu %s %s %s %s\n",db,parv[1],parv[3],parv[4],parv[5]); + strcpy(db_buf2,db_buf); /* db_alta modifica la cadena */ + if(strcmp(parv[4],"*")) db_alta(db_buf2,que_bdd); /* CheckPoint */ + alarm(3); ! if(strcmp(parv[4],"*")) write(db_file,db_buf,strlen(db_buf)); /* CheckPoint */ ! close(db_file); alarm(0); ! if(!strcmp(parv[4],"*")) db_pack(db_buf,que_bdd); return 0; }