X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcokebank_basic%2Fmain.c;h=9892231a08e7069b0551fa64ebc6d67b926e642d;hb=ca788d1ed62b100c213fa9de432f969d85b136e9;hp=2388be8b58c2454830570e7cb4562605325a183e;hpb=bb482071835d6155974f3d5f91cc288e690e20d1;p=tpg%2Fopendispense2.git diff --git a/src/cokebank_basic/main.c b/src/cokebank_basic/main.c index 2388be8..9892231 100644 --- a/src/cokebank_basic/main.c +++ b/src/cokebank_basic/main.c @@ -9,32 +9,44 @@ */ #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); + int GetMaxID(void); + +// === 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,21 +59,31 @@ 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; } +int GetFlags(int User) +{ + return Bank_GetUserFlags(User); +} + /** * \brief Get the balance of the passed user */ int GetBalance(int User) { - return 0; + return Bank_GetUserBalance(User);; } /** @@ -69,7 +91,7 @@ int GetBalance(int User) */ char *GetUserName(int User) { - return NULL; + return Bank_GetUserName(User); } /** @@ -77,32 +99,19 @@ 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) +int GetMaxID(void) { - if( strcmp(Username, "test") == 0 ) - return Bank_GetUserByName("test"); - return -1; + return giBank_NumUsers; }