From a35f19e32ca818eb9fb715e722d459fef878a8d3 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Thu, 6 Mar 2003 09:42:11 +0000 Subject: [PATCH] Created C-exported functions: getsmsg and getnmsg - return user telegram and node messages that must be freed by the caller (or NULL if no message). --- src/sbbs3/userdat.c | 82 +++++++++++++++++++++++++++++++++++++++++++++ src/sbbs3/userdat.h | 2 ++ 2 files changed, 84 insertions(+) diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c index b2ff17570c..3f5e8e8858 100644 --- a/src/sbbs3/userdat.c +++ b/src/sbbs3/userdat.c @@ -1002,6 +1002,88 @@ int DLLCALL putsmsg(scfg_t* cfg, int usernumber, char *strin) return(0); } +/****************************************************************************/ +/* Returns any short messages waiting for user number, buffer must be freed */ +/****************************************************************************/ +char* DLLCALL getsmsg(scfg_t* cfg, int usernumber) +{ + char str[MAX_PATH+1], HUGE16 *buf; + int i; + int file; + long length; + node_t node; + + sprintf(str,"%smsgs/%4.4u.msg",cfg->data_dir,usernumber); + if(flength(str)<1L) + return(NULL); + if((file=nopen(str,O_RDWR))==-1) + return(NULL); + length=filelength(file); + if((buf=(char *)malloc(length+1))==NULL) { + close(file); + return(NULL); + } + if(read(file,buf,length)!=length) { + close(file); + free(buf); + return(NULL); + } + chsize(file,0L); + close(file); + buf[length]=0; + + for(i=1;i<=cfg->sys_nodes;i++) { /* clear msg waiting flag */ + getnodedat(cfg,i,&node,NULL); + if(node.useron==usernumber + && (node.status==NODE_INUSE || node.status==NODE_QUIET) + && node.misc&NODE_MSGW) { + getnodedat(cfg,i,&node,&file); + node.misc&=~NODE_MSGW; + putnodedat(cfg,i,&node,file); + } + } + + return(buf); /* caller must free */ +} + +char* DLLCALL getnmsg(scfg_t* cfg, int node_num) +{ + char str[MAX_PATH+1]; + char* buf; + int file; + long length; + node_t node; + + getnodedat(cfg,node_num,&node,&file); + node.misc&=~NODE_NMSG; /* clear the NMSG flag */ + putnodedat(cfg,node_num,&node,file); + + sprintf(str,"%smsgs/n%3.3u.msg",cfg->data_dir,node_num); + if(flength(str)<1L) + return(NULL); + if((file=nopen(str,O_RDWR))==-1) + return(NULL); + length=filelength(file); + if(!length) { + close(file); + return(NULL); + } + if((buf=(char *)malloc(length+1))==NULL) { + close(file); + return(NULL); + } + if(read(file,buf,length)!=length) { + close(file); + free(buf); + return(NULL); + } + chsize(file,0L); + close(file); + buf[length]=0; + + return(buf); /* caller must free */ +} + /****************************************************************************/ /* Creates a short message for node 'num' that contains 'strin' */ /****************************************************************************/ diff --git a/src/sbbs3/userdat.h b/src/sbbs3/userdat.h index df42e1afb9..a846814858 100644 --- a/src/sbbs3/userdat.h +++ b/src/sbbs3/userdat.h @@ -88,7 +88,9 @@ DLLEXPORT void DLLCALL printnodedat(scfg_t* cfg, uint number, node_t* node); DLLEXPORT void DLLCALL packchatpass(char *pass, node_t* node); DLLEXPORT char* DLLCALL unpackchatpass(char *pass, node_t* node); +DLLEXPORT char* DLLCALL getsmsg(scfg_t* cfg, int usernumber); DLLEXPORT int DLLCALL putsmsg(scfg_t* cfg, int usernumber, char *strin); +DLLEXPORT char* DLLCALL getnmsg(scfg_t* cfg, int node_num); DLLEXPORT int DLLCALL putnmsg(scfg_t* cfg, int num, char *strin); DLLEXPORT uint DLLCALL userdatdupe(scfg_t* cfg, uint usernumber, uint offset, uint datlen, char *dat -- GitLab