X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Fcokebank_basic%2Fmain.c;h=6bbc3f29a2fa748366b3e3a754fc2eab9cf36da6;hb=a3b265fadf5761d8e8a14357db5402d04d65796e;hp=2388be8b58c2454830570e7cb4562605325a183e;hpb=bb482071835d6155974f3d5f91cc288e690e20d1;p=tpg%2Fopendispense2.git diff --git a/src/cokebank_basic/main.c b/src/cokebank_basic/main.c index 2388be8..6bbc3f2 100644 --- a/src/cokebank_basic/main.c +++ b/src/cokebank_basic/main.c @@ -9,32 +9,43 @@ */ #include #include -#include #include - -// === IMPORTS === - int Bank_GetMinAllowedBalance(int ID); - int Bank_GetUserBalance(int ID); - int Bank_AlterUserBalance(int ID, int Delta); - int Bank_GetUserByUnixID(int UnixID); - int Bank_GetUserByName(const char *Name); - int Bank_AddUser(int UnixID); +#include +#include "common.h" // === PROTOTYPES === -void Init_Cokebank(void); +void Init_Cokebank(const char *Argument); int Transfer(int SourceUser, int DestUser, int Ammount, const char *Reason); int GetBalance(int User); char *GetUserName(int User); int GetUserID(const char *Username); int GetUserAuth(const char *Username, const char *Password); +// === GLOBALS === +FILE *gBank_LogFile; + // === CODE === /** * \brief Load the cokebank database */ -void Init_Cokebank(void) +void Init_Cokebank(const char *Argument) { - + gBank_File = fopen(Argument, "rb+"); + if( !gBank_File ) { + gBank_File = fopen(Argument, "wb+"); + } + if( !gBank_File ) { + perror("Opening coke bank"); + } + + gBank_LogFile = fopen("cokebank.log", "a"); + if( !gBank_LogFile ) gBank_LogFile = stdout; + + fseek(gBank_File, 0, SEEK_END); + giBank_NumUsers = ftell(gBank_File) / sizeof(gaBank_Users[0]); + fseek(gBank_File, 0, SEEK_SET); + gaBank_Users = malloc( giBank_NumUsers * sizeof(gaBank_Users[0]) ); + fread(gaBank_Users, sizeof(gaBank_Users[0]), giBank_NumUsers, gBank_File); } /** @@ -47,12 +58,16 @@ void Init_Cokebank(void) */ int Transfer(int SourceUser, int DestUser, int Ammount, const char *Reason) { - if( Bank_GetUserBalance(SourceUser) - Ammount < Bank_GetMinAllowedBalance(SourceUser) ) + int srcBal = Bank_GetUserBalance(SourceUser); + int dstBal = Bank_GetUserBalance(DestUser); + if( srcBal - Ammount < Bank_GetMinAllowedBalance(SourceUser) ) return 1; - if( Bank_GetUserBalance(DestUser) + Ammount < Bank_GetMinAllowedBalance(DestUser) ) + if( dstBal + Ammount < Bank_GetMinAllowedBalance(DestUser) ) return 1; Bank_AlterUserBalance(DestUser, Ammount); Bank_AlterUserBalance(SourceUser, -Ammount); + fprintf(gBank_LogFile, "ACCT #%i{%i} -= %ic [to #%i] (%s)\n", SourceUser, srcBal, Ammount, DestUser, Reason); + fprintf(gBank_LogFile, "ACCT #%i{%i} += %ic [from #%i] (%s)\n", DestUser, dstBal, Ammount, SourceUser, Reason); return 0; } @@ -61,7 +76,7 @@ int Transfer(int SourceUser, int DestUser, int Ammount, const char *Reason) */ int GetBalance(int User) { - return 0; + return Bank_GetUserBalance(User);; } /** @@ -69,7 +84,7 @@ int GetBalance(int User) */ char *GetUserName(int User) { - return NULL; + return Bank_GetUserName(User); } /** @@ -77,32 +92,14 @@ char *GetUserName(int User) */ int GetUserID(const char *Username) { - struct passwd *pwd; int ret; - // Get user ID - pwd = getpwnam(Username); - if( !pwd ) { - return -1; - } - // Get internal ID (or create new user) - ret = Bank_GetUserByUnixID(pwd->pw_uid); + ret = Bank_GetUserByName(Username); if( ret == -1 ) { - ret = Bank_AddUser(pwd->pw_uid); + ret = Bank_AddUser(Username); } return ret; } -/** - * \brief Authenticate a user - * \return User ID, or -1 if authentication failed - */ -int GetUserAuth(const char *Username, const char *Password) -{ - if( strcmp(Username, "test") == 0 ) - return Bank_GetUserByName("test"); - return -1; -} -