diff --git a/src/sbbs3/data_ovl.cpp b/src/sbbs3/data_ovl.cpp index 3875cf2be39a5c26bcf9ce1378c60819f280dc97..d7ed9e2e7c3f9ca4bccc11db6cb97fa980429556 100644 --- a/src/sbbs3/data_ovl.cpp +++ b/src/sbbs3/data_ovl.cpp @@ -37,42 +37,6 @@ #include "sbbs.h" -/****************************************************************************/ -/* Puts 'name' into slot 'number' in user/name.dat */ -/****************************************************************************/ -void sbbs_t::putusername(int number, char *name) -{ - char str[256]; - int file; - long length; - - if (number<1) { - errormsg(WHERE,ERR_CHK,"user number",number); - return; } - - sprintf(str,"%suser/name.dat", cfg.data_dir); - if((file=nopen(str,O_RDWR|O_CREAT))==-1) { - errormsg(WHERE,ERR_OPEN,str,O_RDWR|O_CREAT); - return; } - length=filelength(file); - if(length && length%(LEN_ALIAS+2)) { - close(file); - errormsg(WHERE,ERR_LEN,str,length); - return; } - if(length<(((long)number-1)*(LEN_ALIAS+2))) { - sprintf(str,"%*s",LEN_ALIAS,nulstr); - memset(str,ETX,LEN_ALIAS); - strcat(str,crlf); - lseek(file,0L,SEEK_END); - while(filelength(file)<((long)number*(LEN_ALIAS+2))) - write(file,str,(LEN_ALIAS+2)); } - lseek(file,(long)(((long)number-1)*(LEN_ALIAS+2)),SEEK_SET); - putrec(str,0,LEN_ALIAS,name); - putrec(str,LEN_ALIAS,2,crlf); - write(file,str,LEN_ALIAS+2); - close(file); -} - /****************************************************************************/ /* Fills the 'ptr' element of the each element of the cfg.sub[] array of sub_t */ /* and the sub_cfg and sub_ptr global variables */ diff --git a/src/sbbs3/exec.cpp b/src/sbbs3/exec.cpp index 9e91ea6c4b28f1c609e0693187d045b47caf8697..9e9f04d6e84b516ea1a20b146af8f0c12e81c4e7 100644 --- a/src/sbbs3/exec.cpp +++ b/src/sbbs3/exec.cpp @@ -1411,7 +1411,7 @@ int sbbs_t::exec(csi_t *csi) break; sprintf(useron.alias,"%.*s",LEN_ALIAS,csi->str); putuserrec(&cfg,useron.number,U_ALIAS,LEN_ALIAS,useron.alias); - putusername(useron.number,useron.alias); + putusername(&cfg,useron.number,useron.alias); csi->logic=LOGIC_TRUE; break; case USER_STRING_REALNAME: diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index f70f16f7ad58966e050a88502fc46f3a7291896c..b6e87b8e00c8d0c7b7352429c881ad2fc104818a 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -2606,11 +2606,11 @@ void node_thread(void* arg) username(&sbbs->cfg,i,uname); if(user.misc&DELETED) { if(strcmp(uname,"DELETED USER")) - sbbs->putusername(i,nulstr); + putusername(&sbbs->cfg,i,nulstr); continue; } if(strcmp(user.alias,uname)) - sbbs->putusername(i,user.alias); + putusername(&sbbs->cfg,i,user.alias); if(!(user.misc&(DELETED|INACTIVE)) && user.expire && (ulong)user.expire<=(ulong)now) { @@ -2668,7 +2668,7 @@ void node_thread(void* arg) sprintf(str,"Auto-Deleted %s #%u",user.alias,user.number); sbbs->logentry("!*",str); sbbs->delallmail(i); - sbbs->putusername(i,nulstr); + putusername(&sbbs->cfg,i,nulstr); putuserrec(&sbbs->cfg,i,U_MISC,8,ultoa(user.misc|DELETED,str,16)); } } diff --git a/src/sbbs3/newuser.cpp b/src/sbbs3/newuser.cpp index b7d7b892be362d94f33be9ab7c83f62da4b27c3d..04285f2ec9e417e5841d10782ec9286036f381f5 100644 --- a/src/sbbs3/newuser.cpp +++ b/src/sbbs3/newuser.cpp @@ -398,7 +398,7 @@ void sbbs_t::newuser() useron.number=i; putuserdat(&cfg,&useron); - putusername(useron.number,useron.alias); + putusername(&cfg,useron.number,useron.alias); logline(nulstr,"Wrote user data"); if(cfg.new_sif[0]) { sprintf(str,"%suser/%4.4u.dat",cfg.data_dir,useron.number); @@ -428,7 +428,7 @@ void sbbs_t::newuser() putuserrec(&cfg,useron.number,U_COMMENT,60,"Didn't leave feedback"); putuserrec(&cfg,useron.number,U_MISC,8 ,ultoa(useron.misc|DELETED,tmp,16)); - putusername(useron.number,nulstr); + putusername(&cfg,useron.number,nulstr); return; } } } sprintf(str,"%sfile/%04u.IN",cfg.data_dir,useron.number); /* delete any files */ diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h index 1ee5acb223fd5384310541de35c0c868908ce277..8bb34164a7e838a7fd2b9958af8f8779523019e3 100644 --- a/src/sbbs3/sbbs.h +++ b/src/sbbs3/sbbs.h @@ -357,7 +357,6 @@ public: void putnodeext(uint number, char * str); void getnodedat(uint number, node_t * node, bool lock); void putnodedat(uint number, node_t * node); - void putusername(int number, char * name); void nodesync(void); user_t nodesync_user; bool nodesync_inside; diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c index 2f5f78dabd8c52ad3bf5bda08c84c776d1b942af..621244f5a7c283cada9f1ccee632a11922ead3e4 100644 --- a/src/sbbs3/userdat.c +++ b/src/sbbs3/userdat.c @@ -154,10 +154,9 @@ int DLLCALL getuserdat(scfg_t* cfg, user_t *user) unlock(file,(long)((long)(user->number-1)*U_LEN),U_LEN); close(file); + /* order of these function calls is irrelevant */ getrec(userdat,U_ALIAS,LEN_ALIAS,user->alias); - /* order of these function */ getrec(userdat,U_NAME,LEN_NAME,user->name); - /* calls is irrelevant */ getrec(userdat,U_HANDLE,LEN_HANDLE,user->handle); getrec(userdat,U_NOTE,LEN_NOTE,user->note); getrec(userdat,U_COMP,LEN_COMP,user->comp); @@ -197,8 +196,7 @@ int DLLCALL getuserdat(scfg_t* cfg, user_t *user) getrec(userdat,U_CDT,10,str); user->cdt=atol(str); getrec(userdat,U_MIN,10,str); user->min=atol(str); getrec(userdat,U_LEVEL,2,str); user->level=atoi(str); - getrec(userdat,U_FLAGS1,8,str); user->flags1=ahtoul(str); /*** - getrec(userdat,U_TL,2,str); user->tl=atoi(str); ***/ + getrec(userdat,U_FLAGS1,8,str); user->flags1=ahtoul(str); getrec(userdat,U_FLAGS2,8,str); user->flags2=ahtoul(str); getrec(userdat,U_FLAGS3,8,str); user->flags3=ahtoul(str); getrec(userdat,U_FLAGS4,8,str); user->flags4=ahtoul(str); @@ -471,6 +469,43 @@ char* DLLCALL username(scfg_t* cfg, int usernumber,char *strin) return(strin); } +/****************************************************************************/ +/* Puts 'name' into slot 'number' in user/name.dat */ +/****************************************************************************/ +int putusername(scfg_t* cfg, int number, char *name) +{ + char str[256]; + int file; + long length; + + if (number<1) + return(-1); + + sprintf(str,"%suser/name.dat", cfg->data_dir); + if((file=nopen(str,O_RDWR|O_CREAT))==-1) + return(-2); + length=filelength(file); + if(length && length%(LEN_ALIAS+2)) { + close(file); + return(-3); + } + if(length<(((long)number-1)*(LEN_ALIAS+2))) { + sprintf(str,"%*s",LEN_ALIAS,nulstr); + memset(str,ETX,LEN_ALIAS); + strcat(str,crlf); + lseek(file,0L,SEEK_END); + while(filelength(file)<((long)number*(LEN_ALIAS+2))) + write(file,str,(LEN_ALIAS+2)); + } + lseek(file,(long)(((long)number-1)*(LEN_ALIAS+2)),SEEK_SET); + putrec(str,0,LEN_ALIAS,name); + putrec(str,LEN_ALIAS,2,crlf); + write(file,str,LEN_ALIAS+2); + close(file); + + return(0); +} + /****************************************************************************/ /* Places into 'strout' CR or ETX terminated string starting at */ /* 'start' and ending at 'start'+'length' or terminator from 'strin' */ diff --git a/src/sbbs3/userdat.h b/src/sbbs3/userdat.h index dc2a4bea0d689c94a531bfab621cf191ec7e52c3..954b9386e77ff9ef65bdef72e3f77bf3af7a3d27 100644 --- a/src/sbbs3/userdat.h +++ b/src/sbbs3/userdat.h @@ -75,6 +75,7 @@ DLLEXPORT int DLLCALL putuserdat(scfg_t* cfg, user_t* user); /* Put userdat stru DLLEXPORT void DLLCALL getrec(char *instr,int start,int length,char *outstr); /* Retrieve a record from a string */ DLLEXPORT void DLLCALL putrec(char *outstr,int start,int length,char *instr); /* Place a record into a string */ DLLEXPORT uint DLLCALL matchuser(scfg_t* cfg, char *str); /* Checks for a username match */ +DLLEXPORT int DLLCALL putusername(scfg_t* cfg, int number, char * name); DLLEXPORT uint DLLCALL lastuser(scfg_t* cfg); DLLEXPORT char DLLCALL getage(scfg_t* cfg, char *birthdate); DLLEXPORT char* DLLCALL username(scfg_t* cfg, int usernumber, char * str); diff --git a/src/sbbs3/useredit.cpp b/src/sbbs3/useredit.cpp index f3634f86388859a08606e93c1cf1e05ee417d0f4..07f0bf38f81914df2bbae24293e4aa0688051245 100644 --- a/src/sbbs3/useredit.cpp +++ b/src/sbbs3/useredit.cpp @@ -174,7 +174,7 @@ void sbbs_t::useredit(int usernumber) getstr(user.alias,LEN_ALIAS,K_LINE|K_EDIT|K_AUTODEL); putuserrec(&cfg,user.number,U_ALIAS,LEN_ALIAS,user.alias); if(!(user.misc&DELETED)) - putusername(user.number,user.alias); + putusername(&cfg,user.number,user.alias); bputs(text[EnterYourHandle]); getstr(user.handle,LEN_HANDLE,K_LINE|K_EDIT|K_AUTODEL); putuserrec(&cfg,user.number,U_HANDLE,LEN_HANDLE,user.handle); @@ -194,7 +194,7 @@ void sbbs_t::useredit(int usernumber) if(!noyes(text[UeditRestoreQ])) { putuserrec(&cfg,user.number,U_MISC,8 ,ultoa(user.misc&~DELETED,str,16)); - putusername(user.number,user.alias); } + putusername(&cfg,user.number,user.alias); } break; } if(user.misc&INACTIVE) { if(!noyes(text[UeditActivateQ])) @@ -211,7 +211,7 @@ void sbbs_t::useredit(int usernumber) readmail(user.number,MAIL_SENT); } putuserrec(&cfg,user.number,U_MISC,8 ,ultoa(user.misc|DELETED,str,16)); - putusername(user.number,nulstr); + putusername(&cfg,user.number,nulstr); break; } if(!noyes(text[UeditDeactivateUserQ])) { if(getmail(&cfg,user.number,0)) { @@ -496,7 +496,7 @@ void sbbs_t::useredit(int usernumber) i=getnum(lastuser(&cfg)); if(i>0) { user.number=i; - putusername(user.number,user.alias); + putusername(&cfg,user.number,user.alias); putuserdat(&cfg,&user); } } break; case 'Z': @@ -1019,6 +1019,6 @@ void sbbs_t::purgeuser(int usernumber) sprintf(str,"Purged %s #%u",user.alias,usernumber); logentry("!*",str); delallmail(usernumber); - putusername(usernumber,nulstr); + putusername(&cfg,usernumber,nulstr); putuserrec(&cfg,usernumber,U_MISC,8,ultoa(user.misc|DELETED,str,16)); }