Skip to content
Snippets Groups Projects
Commit 44710259 authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

Unify the int return values of userdat.c functions

These functions now return a common set of non-zero error values (where
appropriate), defined in userdat.h

Don't return errno.
parent 62ed3d3a
Branches
Tags
No related merge requests found
Pipeline #7305 canceled
...@@ -253,7 +253,7 @@ int openuserdat(scfg_t* cfg, bool for_modify) ...@@ -253,7 +253,7 @@ int openuserdat(scfg_t* cfg, bool for_modify)
char path[MAX_PATH+1]; char path[MAX_PATH+1];
if(!VALID_CFG(cfg)) if(!VALID_CFG(cfg))
return(-1); return USER_INVALID_ARG;
return nopen(userdat_filename(cfg, path, sizeof(path)), for_modify ? (O_RDWR|O_CREAT|O_DENYNONE) : (O_RDONLY|O_DENYNONE)); return nopen(userdat_filename(cfg, path, sizeof(path)), for_modify ? (O_RDWR|O_CREAT|O_DENYNONE) : (O_RDONLY|O_DENYNONE));
} }
...@@ -261,7 +261,7 @@ int openuserdat(scfg_t* cfg, bool for_modify) ...@@ -261,7 +261,7 @@ int openuserdat(scfg_t* cfg, bool for_modify)
int closeuserdat(int file) int closeuserdat(int file)
{ {
if(file < 0) if(file < 0)
return -1; return USER_INVALID_ARG;
return close(file); return close(file);
} }
...@@ -308,7 +308,7 @@ int readuserdat(scfg_t* cfg, unsigned user_number, char* userdat, size_t size, i ...@@ -308,7 +308,7 @@ int readuserdat(scfg_t* cfg, unsigned user_number, char* userdat, size_t size, i
int file; int file;
if(!VALID_CFG(cfg) || !VALID_USER_NUMBER(user_number)) if(!VALID_CFG(cfg) || !VALID_USER_NUMBER(user_number))
return -1; return USER_INVALID_ARG;
memset(userdat, 0, size); memset(userdat, 0, size);
if(infile >= 0) if(infile >= 0)
...@@ -321,32 +321,32 @@ int readuserdat(scfg_t* cfg, unsigned user_number, char* userdat, size_t size, i ...@@ -321,32 +321,32 @@ int readuserdat(scfg_t* cfg, unsigned user_number, char* userdat, size_t size, i
if(user_number > (unsigned)(filelength(file) / USER_RECORD_LINE_LEN)) { if(user_number > (unsigned)(filelength(file) / USER_RECORD_LINE_LEN)) {
if(file != infile) if(file != infile)
close(file); close(file);
return -2; /* no such user record */ return USER_INVALID_NUM; /* no such user record */
} }
if(!seekuserdat(file, user_number)) { if(!seekuserdat(file, user_number)) {
if(file != infile) if(file != infile)
close(file); close(file);
return -3; return USER_SEEK_ERROR;
} }
if(!lockuserdat(file, user_number)) { if(!lockuserdat(file, user_number)) {
if(file != infile) if(file != infile)
close(file); close(file);
return -4; return USER_LOCK_ERROR;
} }
if(read(file, userdat, size - 1) != size - 1) { if(read(file, userdat, size - 1) != size - 1) {
unlockuserdat(file, user_number); unlockuserdat(file, user_number);
if(file != infile) if(file != infile)
close(file); close(file);
return -5; return USER_READ_ERROR;
} }
if(!leave_locked) if(!leave_locked)
unlockuserdat(file, user_number); unlockuserdat(file, user_number);
if(file != infile) if(file != infile)
close(file); close(file);
return 0; return USER_SUCCESS;
} }
// Assumes file already positioned at beginning of user record // Assumes file already positioned at beginning of user record
...@@ -383,13 +383,13 @@ int parseuserdat(scfg_t* cfg, char *userdat, user_t *user, char* field[]) ...@@ -383,13 +383,13 @@ int parseuserdat(scfg_t* cfg, char *userdat, user_t *user, char* field[])
unsigned user_number; unsigned user_number;
if(user==NULL) if(user==NULL)
return(-1); return USER_INVALID_ARG;
user_number=user->number; user_number=user->number;
memset(user,0,sizeof(user_t)); memset(user,0,sizeof(user_t));
if(!VALID_CFG(cfg) || !VALID_USER_NUMBER(user_number)) if(!VALID_CFG(cfg) || !VALID_USER_NUMBER(user_number))
return(-1); return USER_INVALID_ARG;
/* The user number needs to be set here /* The user number needs to be set here
before calling chk_ar() below for user-number comparisons in AR strings to function correctly */ before calling chk_ar() below for user-number comparisons in AR strings to function correctly */
...@@ -485,7 +485,7 @@ int parseuserdat(scfg_t* cfg, char *userdat, user_t *user, char* field[]) ...@@ -485,7 +485,7 @@ int parseuserdat(scfg_t* cfg, char *userdat, user_t *user, char* field[])
resetdailyuserdat(cfg,user,/* write: */false); resetdailyuserdat(cfg,user,/* write: */false);
} }
} }
return(0); return USER_SUCCESS;
} }
/****************************************************************************/ /****************************************************************************/
...@@ -498,7 +498,7 @@ int getuserdat(scfg_t* cfg, user_t *user) ...@@ -498,7 +498,7 @@ int getuserdat(scfg_t* cfg, user_t *user)
char userdat[USER_RECORD_LINE_LEN + 1]; char userdat[USER_RECORD_LINE_LEN + 1];
if(!VALID_CFG(cfg) || user==NULL || !VALID_USER_NUMBER(user->number)) if(!VALID_CFG(cfg) || user==NULL || !VALID_USER_NUMBER(user->number))
return(-1); return USER_INVALID_ARG;
if((file = openuserdat(cfg, /* for_modify: */false)) < 0) { if((file = openuserdat(cfg, /* for_modify: */false)) < 0) {
user->number = 0; user->number = 0;
...@@ -522,7 +522,7 @@ int fgetuserdat(scfg_t* cfg, user_t *user, int file) ...@@ -522,7 +522,7 @@ int fgetuserdat(scfg_t* cfg, user_t *user, int file)
char userdat[USER_RECORD_LEN + 1]; char userdat[USER_RECORD_LEN + 1];
if(!VALID_CFG(cfg) || user==NULL || !VALID_USER_NUMBER(user->number)) if(!VALID_CFG(cfg) || user==NULL || !VALID_USER_NUMBER(user->number))
return(-1); return USER_INVALID_ARG;
if((retval = readuserdat(cfg, user->number, userdat, sizeof(userdat), file, /* leave_locked: */false)) != 0) { if((retval = readuserdat(cfg, user->number, userdat, sizeof(userdat), file, /* leave_locked: */false)) != 0) {
user->number = 0; user->number = 0;
...@@ -768,41 +768,41 @@ int putuserdat(scfg_t* cfg, user_t* user) ...@@ -768,41 +768,41 @@ int putuserdat(scfg_t* cfg, user_t* user)
char userdat[USER_RECORD_LINE_LEN]; char userdat[USER_RECORD_LINE_LEN];
if(user==NULL) if(user==NULL)
return(-1); return USER_INVALID_ARG;
if(!VALID_CFG(cfg) || !VALID_USER_NUMBER(user->number)) if(!VALID_CFG(cfg) || !VALID_USER_NUMBER(user->number))
return(-1); return USER_INVALID_ARG;
if(!format_userdat(cfg, user, userdat)) if(!format_userdat(cfg, user, userdat))
return -10; return USER_FORMAT_ERROR;
if((file=openuserdat(cfg, /* for_modify: */true)) < 0) if((file=openuserdat(cfg, /* for_modify: */true)) < 0)
return(errno); return USER_OPEN_ERROR;
if(filelength(file)<((off_t)user->number - 1) * USER_RECORD_LINE_LEN) { if(filelength(file)<((off_t)user->number - 1) * USER_RECORD_LINE_LEN) {
close(file); close(file);
return(-4); return USER_INVALID_NUM;
} }
if(!seekuserdat(file, user->number)) { if(!seekuserdat(file, user->number)) {
close(file); close(file);
return -5; return USER_SEEK_ERROR;
} }
if(!lockuserdat(file, user->number)) { if(!lockuserdat(file, user->number)) {
close(file); close(file);
return(-2); return USER_LOCK_ERROR;
} }
if(write(file,userdat,sizeof(userdat)) != sizeof(userdat)) { if(write(file,userdat,sizeof(userdat)) != sizeof(userdat)) {
unlockuserdat(file, user->number); unlockuserdat(file, user->number);
close(file); close(file);
return(-3); return USER_WRITE_ERROR;
} }
unlockuserdat(file, user->number); unlockuserdat(file, user->number);
close(file); close(file);
dirtyuserdat(cfg,user->number); dirtyuserdat(cfg,user->number);
return(0); return USER_SUCCESS;
} }
/****************************************************************************/ /****************************************************************************/
...@@ -860,11 +860,11 @@ int putusername(scfg_t* cfg, int number, const char *name) ...@@ -860,11 +860,11 @@ int putusername(scfg_t* cfg, int number, const char *name)
off_t total_users; off_t total_users;
if(!VALID_CFG(cfg) || name==NULL || !VALID_USER_NUMBER(number)) if(!VALID_CFG(cfg) || name==NULL || !VALID_USER_NUMBER(number))
return(-1); return USER_INVALID_ARG;
SAFEPRINTF(str,"%suser/name.dat", cfg->data_dir); SAFEPRINTF(str,"%suser/name.dat", cfg->data_dir);
if((file=nopen(str,O_RDWR|O_CREAT))==-1) if((file=nopen(str,O_RDWR|O_CREAT))==-1)
return(errno); return USER_OPEN_ERROR;
length = filelength(file); length = filelength(file);
/* Truncate corrupted name.dat */ /* Truncate corrupted name.dat */
...@@ -872,13 +872,13 @@ int putusername(scfg_t* cfg, int number, const char *name) ...@@ -872,13 +872,13 @@ int putusername(scfg_t* cfg, int number, const char *name)
if(length/(LEN_ALIAS+2) > total_users) { if(length/(LEN_ALIAS+2) > total_users) {
if(chsize(file,(long)(total_users*(LEN_ALIAS+2))) != 0) { if(chsize(file,(long)(total_users*(LEN_ALIAS+2))) != 0) {
close(file); close(file);
return -4; return USER_TRUNC_ERROR;
} }
} }
if(length && length%(LEN_ALIAS+2)) { if(length && length%(LEN_ALIAS+2)) {
close(file); close(file);
return(-3); return USER_SIZE_ERROR;
} }
if(length<(((long)number-1)*(LEN_ALIAS+2))) { if(length<(((long)number-1)*(LEN_ALIAS+2))) {
SAFEPRINTF2(str,"%*s\r\n",LEN_ALIAS,""); SAFEPRINTF2(str,"%*s\r\n",LEN_ALIAS,"");
...@@ -895,8 +895,8 @@ int putusername(scfg_t* cfg, int number, const char *name) ...@@ -895,8 +895,8 @@ int putusername(scfg_t* cfg, int number, const char *name)
close(file); close(file);
if(wr!=LEN_ALIAS+2) if(wr!=LEN_ALIAS+2)
return(errno); return USER_WRITE_ERROR;
return(0); return USER_SUCCESS;
} }
#define DECVAL(ch, mul) (DEC_CHAR_TO_INT(ch) * (mul)) #define DECVAL(ch, mul) (DEC_CHAR_TO_INT(ch) * (mul))
...@@ -1130,16 +1130,17 @@ int getnodedat(scfg_t* cfg, uint number, node_t *node, bool lockit, int* fdp) ...@@ -1130,16 +1130,17 @@ int getnodedat(scfg_t* cfg, uint number, node_t *node, bool lockit, int* fdp)
if(!VALID_CFG(cfg) if(!VALID_CFG(cfg)
|| node==NULL || number<1 || number>cfg->sys_nodes) || node==NULL || number<1 || number>cfg->sys_nodes)
return(-1); return USER_INVALID_ARG;
memset(node,0,sizeof(node_t)); memset(node,0,sizeof(node_t));
if(fdp != NULL && *fdp > 0) if(fdp != NULL && *fdp > 0)
file = *fdp; file = *fdp;
else { else {
if((file = opennodedat(cfg)) == -1) if((file = opennodedat(cfg)) == -1)
return errno; return USER_OPEN_ERROR;
} }
int result = USER_SIZE_ERROR;
if(filelength(file)>=(long)(number*sizeof(node_t))) { if(filelength(file)>=(long)(number*sizeof(node_t))) {
number--; /* make zero based */ number--; /* make zero based */
for(count=0;count<LOOP_NODEDAB;count++) { for(count=0;count<LOOP_NODEDAB;count++) {
...@@ -1147,25 +1148,27 @@ int getnodedat(scfg_t* cfg, uint number, node_t *node, bool lockit, int* fdp) ...@@ -1147,25 +1148,27 @@ int getnodedat(scfg_t* cfg, uint number, node_t *node, bool lockit, int* fdp)
mswait(100); mswait(100);
(void)lseek(file,(long)number*sizeof(node_t),SEEK_SET); (void)lseek(file,(long)number*sizeof(node_t),SEEK_SET);
if(lockit if(lockit
&& lock(file,(long)number*sizeof(node_t),sizeof(node_t))!=0) && lock(file,(long)number*sizeof(node_t),sizeof(node_t))!=0) {
result = USER_LOCK_ERROR;
continue; continue;
}
rd=read(file,node,sizeof(node_t)); rd=read(file,node,sizeof(node_t));
if(rd!=sizeof(node_t)) if(rd!=sizeof(node_t)) {
result = USER_READ_ERROR;
unlock(file,(long)number*sizeof(node_t),sizeof(node_t)); unlock(file,(long)number*sizeof(node_t),sizeof(node_t));
if(rd==sizeof(node_t)) } else {
result = USER_SUCCESS;
break; break;
} }
} }
}
if(fdp==NULL || count==LOOP_NODEDAB) if(fdp==NULL || result != USER_SUCCESS)
CLOSE_OPEN_FILE(file); CLOSE_OPEN_FILE(file);
if(fdp!=NULL) if(fdp!=NULL)
*fdp=file; *fdp=file;
if(count==LOOP_NODEDAB) return result;
return(-2);
return(0);
} }
/****************************************************************************/ /****************************************************************************/
...@@ -1175,16 +1178,15 @@ int getnodedat(scfg_t* cfg, uint number, node_t *node, bool lockit, int* fdp) ...@@ -1175,16 +1178,15 @@ int getnodedat(scfg_t* cfg, uint number, node_t *node, bool lockit, int* fdp)
int putnodedat(scfg_t* cfg, uint number, node_t* node, bool closeit, int file) int putnodedat(scfg_t* cfg, uint number, node_t* node, bool closeit, int file)
{ {
size_t wr=0; size_t wr=0;
int wrerr=0;
int attempts; int attempts;
if(file<0) if(file<0)
return -1; return USER_INVALID_ARG;
if(!VALID_CFG(cfg) if(!VALID_CFG(cfg)
|| node==NULL || number<1 || number>cfg->sys_nodes) { || node==NULL || number<1 || number>cfg->sys_nodes) {
if(closeit) if(closeit)
close(file); close(file);
return(-1); return USER_INVALID_ARG;
} }
number--; /* make zero based */ number--; /* make zero based */
...@@ -1192,7 +1194,6 @@ int putnodedat(scfg_t* cfg, uint number, node_t* node, bool closeit, int file) ...@@ -1192,7 +1194,6 @@ int putnodedat(scfg_t* cfg, uint number, node_t* node, bool closeit, int file)
(void)lseek(file,(long)number*sizeof(node_t),SEEK_SET); (void)lseek(file,(long)number*sizeof(node_t),SEEK_SET);
if((wr=write(file,node,sizeof(node_t)))==sizeof(node_t)) if((wr=write(file,node,sizeof(node_t)))==sizeof(node_t))
break; break;
wrerr=errno; /* save write error */
mswait(((attempts + 1) / 10) * 100); mswait(((attempts + 1) / 10) * 100);
} }
unlock(file,(long)number*sizeof(node_t),sizeof(node_t)); unlock(file,(long)number*sizeof(node_t),sizeof(node_t));
...@@ -1200,8 +1201,8 @@ int putnodedat(scfg_t* cfg, uint number, node_t* node, bool closeit, int file) ...@@ -1200,8 +1201,8 @@ int putnodedat(scfg_t* cfg, uint number, node_t* node, bool closeit, int file)
close(file); close(file);
if(wr!=sizeof(node_t)) if(wr!=sizeof(node_t))
return(wrerr); return USER_WRITE_ERROR;
return(0); return USER_SUCCESS;
} }
/****************************************************************************/ /****************************************************************************/
...@@ -1211,10 +1212,10 @@ bool set_node_status(scfg_t* cfg, int nodenum, enum node_status status) ...@@ -1211,10 +1212,10 @@ bool set_node_status(scfg_t* cfg, int nodenum, enum node_status status)
node_t node; node_t node;
int file = -1; int file = -1;
if(getnodedat(cfg, nodenum, &node, /* lockit: */true, &file) != 0) if(getnodedat(cfg, nodenum, &node, /* lockit: */true, &file) != USER_SUCCESS)
return false; return false;
node.status = status; node.status = status;
return putnodedat(cfg, nodenum, &node, /* closeit: */true, file) == 0; return putnodedat(cfg, nodenum, &node, /* closeit: */true, file) == USER_SUCCESS;
} }
/****************************************************************************/ /****************************************************************************/
...@@ -1224,10 +1225,10 @@ bool set_node_misc(scfg_t* cfg, int nodenum, uint misc) ...@@ -1224,10 +1225,10 @@ bool set_node_misc(scfg_t* cfg, int nodenum, uint misc)
node_t node; node_t node;
int file = -1; int file = -1;
if(getnodedat(cfg, nodenum, &node, /* lockit: */true, &file) != 0) if(getnodedat(cfg, nodenum, &node, /* lockit: */true, &file) != USER_SUCCESS)
return false; return false;
node.misc = misc; node.misc = misc;
return putnodedat(cfg, nodenum, &node, /* closeit: */true, file) == 0; return putnodedat(cfg, nodenum, &node, /* closeit: */true, file) == USER_SUCCESS;
} }
/****************************************************************************/ /****************************************************************************/
...@@ -1237,13 +1238,13 @@ bool set_node_lock(scfg_t* cfg, int nodenum, bool set) ...@@ -1237,13 +1238,13 @@ bool set_node_lock(scfg_t* cfg, int nodenum, bool set)
node_t node; node_t node;
int file = -1; int file = -1;
if(getnodedat(cfg, nodenum, &node, /* lockit: */true, &file) != 0) if(getnodedat(cfg, nodenum, &node, /* lockit: */true, &file) != USER_SUCCESS)
return false; return false;
if(set) if(set)
node.misc |= NODE_LOCK; node.misc |= NODE_LOCK;
else else
node.misc &= ~NODE_LOCK; node.misc &= ~NODE_LOCK;
return putnodedat(cfg, nodenum, &node, /* closeit: */true, file) == 0; return putnodedat(cfg, nodenum, &node, /* closeit: */true, file) == USER_SUCCESS;
} }
/****************************************************************************/ /****************************************************************************/
...@@ -1253,13 +1254,13 @@ bool set_node_interrupt(scfg_t* cfg, int nodenum, bool set) ...@@ -1253,13 +1254,13 @@ bool set_node_interrupt(scfg_t* cfg, int nodenum, bool set)
node_t node; node_t node;
int file = -1; int file = -1;
if(getnodedat(cfg, nodenum, &node, /* lockit: */true, &file) != 0) if(getnodedat(cfg, nodenum, &node, /* lockit: */true, &file) != USER_SUCCESS)
return false; return false;
if(set) if(set)
node.misc |= NODE_INTR; node.misc |= NODE_INTR;
else else
node.misc &= ~NODE_INTR; node.misc &= ~NODE_INTR;
return putnodedat(cfg, nodenum, &node, /* closeit: */true, file) == 0; return putnodedat(cfg, nodenum, &node, /* closeit: */true, file) == USER_SUCCESS;
} }
/****************************************************************************/ /****************************************************************************/
...@@ -1269,13 +1270,13 @@ bool set_node_down(scfg_t* cfg, int nodenum, bool set) ...@@ -1269,13 +1270,13 @@ bool set_node_down(scfg_t* cfg, int nodenum, bool set)
node_t node; node_t node;
int file = -1; int file = -1;
if(getnodedat(cfg, nodenum, &node, /* lockit: */true, &file) != 0) if(getnodedat(cfg, nodenum, &node, /* lockit: */true, &file) != USER_SUCCESS)
return false; return false;
if(set) if(set)
node.misc |= NODE_DOWN; node.misc |= NODE_DOWN;
else else
node.misc &= ~NODE_DOWN; node.misc &= ~NODE_DOWN;
return putnodedat(cfg, nodenum, &node, /* closeit: */true, file) == 0; return putnodedat(cfg, nodenum, &node, /* closeit: */true, file) == USER_SUCCESS;
} }
/****************************************************************************/ /****************************************************************************/
...@@ -1285,13 +1286,13 @@ bool set_node_rerun(scfg_t* cfg, int nodenum, bool set) ...@@ -1285,13 +1286,13 @@ bool set_node_rerun(scfg_t* cfg, int nodenum, bool set)
node_t node; node_t node;
int file = -1; int file = -1;
if(getnodedat(cfg, nodenum, &node, /* lockit: */true, &file) != 0) if(getnodedat(cfg, nodenum, &node, /* lockit: */true, &file) != USER_SUCCESS)
return false; return false;
if(set) if(set)
node.misc |= NODE_RRUN; node.misc |= NODE_RRUN;
else else
node.misc &= ~NODE_RRUN; node.misc &= ~NODE_RRUN;
return putnodedat(cfg, nodenum, &node, /* closeit: */true, file) == 0; return putnodedat(cfg, nodenum, &node, /* closeit: */true, file) == USER_SUCCESS;
} }
/****************************************************************************/ /****************************************************************************/
...@@ -1301,10 +1302,10 @@ bool set_node_errors(scfg_t* cfg, int nodenum, uint errors) ...@@ -1301,10 +1302,10 @@ bool set_node_errors(scfg_t* cfg, int nodenum, uint errors)
node_t node; node_t node;
int file = -1; int file = -1;
if(getnodedat(cfg, nodenum, &node, /* lockit: */true, &file) != 0) if(getnodedat(cfg, nodenum, &node, /* lockit: */true, &file) != USER_SUCCESS)
return false; return false;
node.errors = errors; node.errors = errors;
return putnodedat(cfg, nodenum, &node, /* closeit: */true, file) == 0; return putnodedat(cfg, nodenum, &node, /* closeit: */true, file) == USER_SUCCESS;
} }
/****************************************************************************/ /****************************************************************************/
...@@ -1699,19 +1700,19 @@ int putsmsg(scfg_t* cfg, int usernumber, char *strin) ...@@ -1699,19 +1700,19 @@ int putsmsg(scfg_t* cfg, int usernumber, char *strin)
node_t node; node_t node;
if(!VALID_CFG(cfg) || !VALID_USER_NUMBER(usernumber) || strin==NULL) if(!VALID_CFG(cfg) || !VALID_USER_NUMBER(usernumber) || strin==NULL)
return(-1); return USER_INVALID_ARG;
if(*strin==0) if(*strin==0)
return(0); return USER_SUCCESS;
SAFEPRINTF2(str,"%smsgs/%4.4u.msg",cfg->data_dir,usernumber); SAFEPRINTF2(str,"%smsgs/%4.4u.msg",cfg->data_dir,usernumber);
if((file=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1) { if((file=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1) {
return(errno); return USER_OPEN_ERROR;
} }
i=strlen(strin); i=strlen(strin);
if(write(file,strin,i)!=i) { if(write(file,strin,i)!=i) {
close(file); close(file);
return(errno); return USER_WRITE_ERROR;
} }
close(file); close(file);
file = -1; file = -1;
...@@ -1727,7 +1728,7 @@ int putsmsg(scfg_t* cfg, int usernumber, char *strin) ...@@ -1727,7 +1728,7 @@ int putsmsg(scfg_t* cfg, int usernumber, char *strin)
} }
} }
CLOSE_OPEN_FILE(file); CLOSE_OPEN_FILE(file);
return(0); return USER_SUCCESS;
} }
/****************************************************************************/ /****************************************************************************/
...@@ -1854,19 +1855,19 @@ int putnmsg(scfg_t* cfg, int num, char *strin) ...@@ -1854,19 +1855,19 @@ int putnmsg(scfg_t* cfg, int num, char *strin)
node_t node; node_t node;
if(!VALID_CFG(cfg) || num<1 || strin==NULL) if(!VALID_CFG(cfg) || num<1 || strin==NULL)
return(-1); return USER_INVALID_ARG;
if(*strin==0) if(*strin==0)
return(0); return USER_SUCCESS;
SAFEPRINTF2(str,"%smsgs/n%3.3u.msg",cfg->data_dir,num); SAFEPRINTF2(str,"%smsgs/n%3.3u.msg",cfg->data_dir,num);
if((file=nopen(str,O_WRONLY|O_CREAT))==-1) if((file=nopen(str,O_WRONLY|O_CREAT))==-1)
return(errno); return USER_OPEN_ERROR;
(void)lseek(file,0L,SEEK_END); /* Instead of opening with O_APPEND */ (void)lseek(file,0L,SEEK_END); /* Instead of opening with O_APPEND */
i=strlen(strin); i=strlen(strin);
if(write(file,strin,i)!=i) { if(write(file,strin,i)!=i) {
close(file); close(file);
return(errno); return USER_WRITE_ERROR;
} }
CLOSE_OPEN_FILE(file); CLOSE_OPEN_FILE(file);
getnodedat(cfg,num,&node, /* lockit: */false, &file); getnodedat(cfg,num,&node, /* lockit: */false, &file);
...@@ -1879,7 +1880,7 @@ int putnmsg(scfg_t* cfg, int num, char *strin) ...@@ -1879,7 +1880,7 @@ int putnmsg(scfg_t* cfg, int num, char *strin)
} }
CLOSE_OPEN_FILE(file); CLOSE_OPEN_FILE(file);
return(0); return USER_SUCCESS;
} }
/* Return node's client's socket descriptor or negative on error */ /* Return node's client's socket descriptor or negative on error */
...@@ -2597,16 +2598,16 @@ int putuserstr(scfg_t* cfg, int usernumber, enum user_field fnum, const char *st ...@@ -2597,16 +2598,16 @@ int putuserstr(scfg_t* cfg, int usernumber, enum user_field fnum, const char *st
int retval; int retval;
if(!VALID_CFG(cfg) || !VALID_USER_NUMBER(usernumber) || !VALID_USER_FIELD(fnum) || str == NULL) if(!VALID_CFG(cfg) || !VALID_USER_NUMBER(usernumber) || !VALID_USER_FIELD(fnum) || str == NULL)
return -1; return USER_INVALID_ARG;
if(strchr(str, USER_FIELD_SEPARATOR) != NULL) if(strchr(str, USER_FIELD_SEPARATOR) != NULL)
return -2; return USER_FORMAT_ERROR;
if((file = openuserdat(cfg, /* for_modify: */true)) == -1) if((file = openuserdat(cfg, /* for_modify: */true)) == -1)
return errno; return USER_OPEN_ERROR;
retval = readuserdat(cfg, usernumber, userdat, sizeof(userdat), file, /* leave_locked: */true); retval = readuserdat(cfg, usernumber, userdat, sizeof(userdat), file, /* leave_locked: */true);
if(retval == 0) { if(retval == USER_SUCCESS) {
split_userdat(userdat, field); split_userdat(userdat, field);
field[fnum] = (char*)str; field[fnum] = (char*)str;
if(!seekuserdat(file, usernumber)) if(!seekuserdat(file, usernumber))
...@@ -2616,7 +2617,7 @@ int putuserstr(scfg_t* cfg, int usernumber, enum user_field fnum, const char *st ...@@ -2616,7 +2617,7 @@ int putuserstr(scfg_t* cfg, int usernumber, enum user_field fnum, const char *st
unlockuserdat(file, usernumber); unlockuserdat(file, usernumber);
} }
close(file); close(file);
if(retval == 0) if(retval == USER_SUCCESS)
dirtyuserdat(cfg, usernumber); dirtyuserdat(cfg, usernumber);
return retval; return retval;
} }
...@@ -3230,12 +3231,12 @@ int newuserdat(scfg_t* cfg, user_t* user) ...@@ -3230,12 +3231,12 @@ int newuserdat(scfg_t* cfg, user_t* user)
stats_t stats; stats_t stats;
if(!VALID_CFG(cfg) || user==NULL) if(!VALID_CFG(cfg) || user==NULL)
return(-1); return USER_INVALID_ARG;
SAFEPRINTF(str,"%suser/name.dat",cfg->data_dir); SAFEPRINTF(str,"%suser/name.dat",cfg->data_dir);
if(fexist(str)) { if(fexist(str)) {
if((stream=fnopen(&file,str,O_RDONLY))==NULL) { if((stream=fnopen(&file,str,O_RDONLY))==NULL) {
return(errno); return USER_OPEN_ERROR;
} }
last=(long)filelength(file)/(LEN_ALIAS+2); /* total users */ last=(long)filelength(file)/(LEN_ALIAS+2); /* total users */
while(unum<=last) { while(unum<=last) {
...@@ -3274,10 +3275,10 @@ int newuserdat(scfg_t* cfg, user_t* user) ...@@ -3274,10 +3275,10 @@ int newuserdat(scfg_t* cfg, user_t* user)
user->number=unum; /* store the new user number */ user->number=unum; /* store the new user number */
if((err=putusername(cfg,user->number,user->alias))!=0) if((err=putusername(cfg,user->number,user->alias)) != USER_SUCCESS)
return(err); return(err);
if((err=putuserdat(cfg,user))!=0) if((err=putuserdat(cfg,user)) != USER_SUCCESS)
return(err); return(err);
SAFEPRINTF2(str,"%sfile/%04u.in",cfg->data_dir,user->number); /* delete any files */ SAFEPRINTF2(str,"%sfile/%04u.in",cfg->data_dir,user->number); /* delete any files */
...@@ -3314,7 +3315,7 @@ int newuserdat(scfg_t* cfg, user_t* user) ...@@ -3314,7 +3315,7 @@ int newuserdat(scfg_t* cfg, user_t* user)
fclose_dstats(fp); fclose_dstats(fp);
} }
return(0); return USER_SUCCESS;
} }
size_t user_field_len(enum user_field fnum) size_t user_field_len(enum user_field fnum)
......
...@@ -35,6 +35,19 @@ ...@@ -35,6 +35,19 @@
#define USER_RECORD_LINE_LEN 1000 // includes LF terminator #define USER_RECORD_LINE_LEN 1000 // includes LF terminator
#define USER_RECORD_LEN (USER_RECORD_LINE_LEN - 1) // does not include LF #define USER_RECORD_LEN (USER_RECORD_LINE_LEN - 1) // does not include LF
// API function return values
#define USER_SUCCESS 0
#define USER_INVALID_ARG -100
#define USER_INVALID_NUM -101
#define USER_OPEN_ERROR -102
#define USER_SEEK_ERROR -103
#define USER_LOCK_ERROR -104
#define USER_READ_ERROR -105
#define USER_FORMAT_ERROR -106
#define USER_WRITE_ERROR -107
#define USER_TRUNC_ERROR -108
#define USER_SIZE_ERROR -109
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment