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

Create/use ar_type() to eliminate some copy/pasta in AR/ARS parsing logic

parent 0c6913fb
No related branches found
No related tags found
No related merge requests found
Pipeline #7757 failed
...@@ -21,19 +21,9 @@ ...@@ -21,19 +21,9 @@
#include "ars_defs.h" #include "ars_defs.h"
static BOOL ar_string_arg(int artype) static inline BOOL ar_string_arg(int artype)
{ {
switch(artype) { return ar_type(artype) == AR_STRING;
case AR_SUBCODE:
case AR_DIRCODE:
case AR_SHELL:
case AR_PROT:
case AR_HOST:
case AR_IP:
case AR_USERNAME:
return TRUE; /* These ARS Keywords expect a string argument */
}
return FALSE;
} }
/* Converts ASCII ARS string into binary ARS buffer */ /* Converts ASCII ARS string into binary ARS buffer */
...@@ -490,28 +480,7 @@ uchar* arstr(ushort* count, const char* str, scfg_t* cfg, uchar* ar_buf) ...@@ -490,28 +480,7 @@ uchar* arstr(ushort* count, const char* str, scfg_t* cfg, uchar* ar_buf)
if(n!=i) /* one of the above */ if(n!=i) /* one of the above */
{ {
arg_expected=TRUE; if(ar_type(artype) == AR_BOOL) {
switch(artype) {
case AR_RIP:
case AR_ANSI:
case AR_PETSCII:
case AR_ASCII:
case AR_UTF8:
case AR_CP437:
case AR_DOS:
case AR_OS2:
case AR_UNIX:
case AR_LINUX:
case AR_WIN32:
case AR_LOCAL:
case AR_ACTIVE:
case AR_INACTIVE:
case AR_DELETED:
case AR_EXPERT:
case AR_SYSOP:
case AR_GUEST:
case AR_QNODE:
case AR_QUIET:
/* Boolean (No arguments) */ /* Boolean (No arguments) */
if(not) if(not)
ar[j++]=AR_NOT; ar[j++]=AR_NOT;
...@@ -519,7 +488,6 @@ uchar* arstr(ushort* count, const char* str, scfg_t* cfg, uchar* ar_buf) ...@@ -519,7 +488,6 @@ uchar* arstr(ushort* count, const char* str, scfg_t* cfg, uchar* ar_buf)
ar[j++]=artype; ar[j++]=artype;
artype=AR_INVALID; artype=AR_INVALID;
arg_expected=FALSE; arg_expected=FALSE;
break;
} }
continue; continue;
} }
......
...@@ -118,4 +118,47 @@ enum { /* Access requirement binaries */ ...@@ -118,4 +118,47 @@ enum { /* Access requirement binaries */
,AR_USERNAME ,AR_USERNAME
}; };
enum ar_type {
AR_BOOL
,AR_NUM
,AR_STRING
};
static inline enum ar_type ar_type(int artype)
{
switch(artype) {
case AR_RIP:
case AR_WIP:
case AR_ANSI:
case AR_PETSCII:
case AR_ASCII:
case AR_UTF8:
case AR_CP437:
case AR_DOS:
case AR_OS2:
case AR_UNIX:
case AR_LINUX:
case AR_WIN32:
case AR_LOCAL:
case AR_ACTIVE:
case AR_INACTIVE:
case AR_DELETED:
case AR_EXPERT:
case AR_SYSOP:
case AR_GUEST:
case AR_QNODE:
case AR_QUIET:
return AR_BOOL;
case AR_SUBCODE:
case AR_DIRCODE:
case AR_SHELL:
case AR_PROT:
case AR_HOST:
case AR_IP:
case AR_USERNAME:
return AR_STRING;
}
return AR_NUM;
}
#endif /* Don't add anything after this line */ #endif /* Don't add anything after this line */
...@@ -70,33 +70,8 @@ bool sbbs_t::ar_exp(const uchar **ptrptr, user_t* user, client_t* client) ...@@ -70,33 +70,8 @@ bool sbbs_t::ar_exp(const uchar **ptrptr, user_t* user, client_t* client)
} }
artype=(**ptrptr); artype=(**ptrptr);
switch(artype) { if(ar_type(artype) != AR_BOOL)
case AR_ANSI: /* No arguments */
case AR_PETSCII:
case AR_ASCII:
case AR_UTF8:
case AR_CP437:
case AR_RIP:
case AR_WIP:
case AR_LOCAL:
case AR_EXPERT:
case AR_SYSOP:
case AR_GUEST:
case AR_QNODE:
case AR_QUIET:
case AR_OS2:
case AR_DOS:
case AR_WIN32:
case AR_UNIX:
case AR_LINUX:
case AR_ACTIVE:
case AR_INACTIVE:
case AR_DELETED:
break;
default:
(*ptrptr)++; (*ptrptr)++;
break;
}
n=(**ptrptr); n=(**ptrptr);
i=(*(short *)*ptrptr); i=(*(short *)*ptrptr);
......
...@@ -1993,33 +1993,8 @@ static bool ar_exp(scfg_t* cfg, uchar **ptrptr, user_t* user, client_t* client) ...@@ -1993,33 +1993,8 @@ static bool ar_exp(scfg_t* cfg, uchar **ptrptr, user_t* user, client_t* client)
} }
artype=(**ptrptr); artype=(**ptrptr);
switch(artype) { if(ar_type(artype) != AR_BOOL)
case AR_ANSI: /* No arguments */
case AR_PETSCII:
case AR_ASCII:
case AR_UTF8:
case AR_CP437:
case AR_RIP:
case AR_WIP:
case AR_LOCAL:
case AR_EXPERT:
case AR_SYSOP:
case AR_GUEST:
case AR_QNODE:
case AR_QUIET:
case AR_OS2:
case AR_DOS:
case AR_WIN32:
case AR_UNIX:
case AR_LINUX:
case AR_ACTIVE:
case AR_INACTIVE:
case AR_DELETED:
break;
default:
(*ptrptr)++; (*ptrptr)++;
break;
}
n=(**ptrptr); n=(**ptrptr);
i=(*(short *)*ptrptr); i=(*(short *)*ptrptr);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment