From: Thomas Walker Lynch Date: Wed, 13 Mar 2019 14:40:39 +0000 (+0100) Subject: finished more testing/refactoring subu-mk-0 and subu-rm-0 X-Git-Url: https://git.reasoningtechnology.com/style/static/git-favicon.png?a=commitdiff_plain;h=1c3c72fa8f29ba09630286bb46f2d845089eecb3;p=subu finished more testing/refactoring subu-mk-0 and subu-rm-0 --- diff --git a/7_makefile b/7_makefile index 24dfafb..f170e23 100755 --- a/7_makefile +++ b/7_makefile @@ -4,22 +4,22 @@ subdirectories=src all : $(foreach dir, $(subdirectories), \ - if [ -f $(dir)/makefile ]; then \ + if [ -f $(dir)/7_makefile ]; then \ make -C $(dir) all && make -C $(dir) install; \ fi;\ ) clean : $(foreach dir, $(subdirectories), \ - if [ -f ./$(dir)/makefile ]; then \ + if [ -f ./$(dir)/7_makefile ]; then \ make -C $(dir) clean; \ fi;\ ) -dist_clean : +dist-clean : $(foreach dir, $(subdirectories), \ - if [ -f ./$(dir)/makefile ]; then \ - make -C $(dir) dist_clean; \ + if [ -f ./$(dir)/7_makefile ]; then \ + make -C $(dir) dist-clean; \ fi;\ ) diff --git a/src/5_scratch/subu.lib.h b/src/5_scratch/subu.lib.h index 45c0b81..93c73b9 100644 --- a/src/5_scratch/subu.lib.h +++ b/src/5_scratch/subu.lib.h @@ -2,7 +2,7 @@ #undef INTERFACE #include int subudb_Masteru_Subu_rm(sqlite3 *db,char *masteru_name,char *subuname,char *subu_username); -int subudb_Masteru_Subu_get(sqlite3 *db,char *masteru_name,char *subuname,char **subu_username); +int subudb_Masteru_Subu_get_subu_username(sqlite3 *db,char *masteru_name,char *subuname,char **subu_username); #include #include int subu_rm_0(char **mess,sqlite3 *db,char *subuname); @@ -14,22 +14,20 @@ int dispatch_exec(char **argv,char **envp); void dispatch_f_mess(char *fname,int err,char *dispatchee); #define ERR_DISPATCH -1024 int dispatch_f_euid_egid(char *fname,int(*f)(void *arg),void *f_arg,uid_t euid,gid_t egid); -int db_commit(sqlite3 *db); -int subudb_number_init(sqlite3 *db,char *masteru_name,int n); -typedef unsigned int uint; -extern uint First_Max_Subunumber; -int db_rollback(sqlite3 *db); -int subudb_number_set(sqlite3 *db,char *masteru_name,int n); -int subudb_number_get(sqlite3 *db,char *masteru_name,int *n); -int db_begin(sqlite3 *db); int dbprintf(const char *format,...); int subu_mk_0(char **mess,sqlite3 *db,char *subuname); extern char Subuland_Extension[]; +int db_commit(sqlite3 *db); +int db_rollback(sqlite3 *db); +int subudb_number_set(sqlite3 *db,int n); +int subudb_number_get(sqlite3 *db,int *n); +int db_begin(sqlite3 *db); +typedef unsigned int uint; extern uint Subuhome_Perms; extern char DB_File[]; void subu_err(char *fname,int err,char *mess); #define SUBU_ERR_N 14 -#define SUBU_ERR_CONFIG_SUBU_NOT_FOUND 13 +#define SUBU_ERR_SUBU_NOT_FOUND 13 #define SUBU_ERR_FAILED_USERDEL 12 #define SUBU_ERR_FAILED_USERADD 11 #define SUBU_ERR_BUG_SSS 10 diff --git a/src/5_scratch/subudb-init.cli.h b/src/5_scratch/subudb-init.cli.h index 36fa2c9..4435103 100644 --- a/src/5_scratch/subudb-init.cli.h +++ b/src/5_scratch/subudb-init.cli.h @@ -1,7 +1,10 @@ /* This file was automatically generated. Do not edit! */ #undef INTERFACE #include +int db_commit(sqlite3 *db); +int db_rollback(sqlite3 *db); int subudb_schema(sqlite3 *db); +int db_begin(sqlite3 *db); #include #include #define SUBU_ERR_DB_FILE 8 diff --git a/src/5_scratch/subudb-number.cli.h b/src/5_scratch/subudb-number.cli.h index 3e4e351..c130fbb 100644 --- a/src/5_scratch/subudb-number.cli.h +++ b/src/5_scratch/subudb-number.cli.h @@ -1,8 +1,8 @@ /* This file was automatically generated. Do not edit! */ #undef INTERFACE #include -int subudb_number_get(sqlite3 *db,char *masteru_name,int *n); -int subudb_number_set(sqlite3 *db,char *masteru_name,int n); +int subudb_number_get(sqlite3 *db,int *n); +int subudb_number_set(sqlite3 *db,int n); #include #include #define SUBU_ERR_N 14 diff --git a/src/5_scratch/subudb-rel-get.cli.h b/src/5_scratch/subudb-rel-get.cli.h index 23c41b1..4f335be 100644 --- a/src/5_scratch/subudb-rel-get.cli.h +++ b/src/5_scratch/subudb-rel-get.cli.h @@ -1,7 +1,7 @@ /* This file was automatically generated. Do not edit! */ #undef INTERFACE #include -int subudb_Masteru_Subu_get(sqlite3 *db,char *masteru_name,char *subuname,char **subu_username); +int subudb_Masteru_Subu_get_subu_username(sqlite3 *db,char *masteru_name,char *subuname,char **subu_username); #include #include #define SUBU_ERR_DB_FILE 8 diff --git a/src/5_scratch/subudb-subus.cli.h b/src/5_scratch/subudb-subus.cli.h new file mode 100644 index 0000000..16310b7 --- /dev/null +++ b/src/5_scratch/subudb-subus.cli.h @@ -0,0 +1,14 @@ +/* This file was automatically generated. Do not edit! */ +#undef INTERFACE +#include +typedef struct subudb_subu_element subudb_subu_element; +int subudb_Masteru_Subu_get_subus(sqlite3 *db,char *masteru_name,subudb_subu_element **sa_pt,subudb_subu_element **sa_end_pt); +struct subudb_subu_element { + char *subuname; + char *subu_username; +}; +#include +#include +#define SUBU_ERR_DB_FILE 8 +extern char DB_File[]; +#define SUBU_ERR_ARG_CNT 1 diff --git a/src/5_scratch/subudb.lib.h b/src/5_scratch/subudb.lib.h index 1c854b3..2a9e9b7 100644 --- a/src/5_scratch/subudb.lib.h +++ b/src/5_scratch/subudb.lib.h @@ -2,12 +2,19 @@ #undef INTERFACE #include int subudb_Masteru_Subu_rm(sqlite3 *db,char *masteru_name,char *subuname,char *subu_username); -int subudb_Masteru_Subu_get(sqlite3 *db,char *masteru_name,char *subuname,char **subu_username); +typedef struct subudb_subu_element subudb_subu_element; +int subudb_Masteru_Subu_get_subus(sqlite3 *db,char *masteru_name,subudb_subu_element **sa_pt,subudb_subu_element **sa_end_pt); +void subu_element_free(subudb_subu_element *base,subudb_subu_element *end_pt); +struct subudb_subu_element { + char *subuname; + char *subu_username; +}; +int subudb_Masteru_Subu_get_subu_username(sqlite3 *db,char *masteru_name,char *subuname,char **subu_username); int subudb_Masteru_Subu_put(sqlite3 *db,char *masteru_name,char *subuname,char *subu_username); -int subudb_number_rm(sqlite3 *db,char *masteru_name); -int subudb_number_set(sqlite3 *db,char *masteru_name,int n); -int subudb_number_get(sqlite3 *db,char *masteru_name,int *n); -int subudb_number_init(sqlite3 *db,char *masteru_name,int n); +int subudb_number_set(sqlite3 *db,int n); +int subudb_number_get(sqlite3 *db,int *n); +typedef unsigned int uint; +extern uint First_Max_Subunumber; int subudb_schema(sqlite3 *db); int db_rollback(sqlite3 *db); int db_commit(sqlite3 *db); diff --git a/src/7_makefile b/src/7_makefile index c16155b..5ab5990 100755 --- a/src/7_makefile +++ b/src/7_makefile @@ -14,7 +14,8 @@ SCRATCHDIR= 5_scratch # clean and others put things here CC=gcc CFLAGS=-std=gnu11 -fPIC -I. -ggdb -Werror -DDEBUG -DDEBUGDB #CFLAGS=-std=gnu11 -fPIC -I. -Werror -LIB=2_lib/libsubu.a +LIBDIR=2_lib/ +LIB=$(LIBDIR)libsubu.a LINKFLAGS=-L2_lib -lsubu -lsqlite3 #these are the source files that exist @@ -150,9 +151,9 @@ dist-clean: @echo '---- make $@:------------------------------------------------------------' @echo `pwd`'>' make clean - if [ -d $(APPLICATION) ]; then cd $(APPLICATION); make clean; fi - if [ -d 1_tests ]; then cd 1_tests; make dist_clean; fi - if [ -d 1_try ] ; then cd 1_try; make dist_clean; fi +# if [ -d $(APPLICATION) ]; then cd $(APPLICATION); make clean; fi +# if [ -d 1_tests ]; then cd 1_tests; make dist_clean; fi +# if [ -d 1_try ] ; then cd 1_try; make dist_clean; fi @echo '______end make $@_____' # diff --git a/src/subu.lib.c b/src/subu.lib.c index 9712f42..67160e0 100644 --- a/src/subu.lib.c +++ b/src/subu.lib.c @@ -121,7 +121,8 @@ void subu_err(char *fname, int err, char *mess){ perror(fname); break; case SUBU_ERR_DB_FILE: - fprintf(stderr, "db file error: %s", DB_File); // DB_File is in common + fprintf(stderr, "error on %s", DB_File); // DB_File is in common + fprintf(stderr, ": %s", mess); break; case SUBU_ERR_MASTERU_HOMELESS: fprintf(stderr,"Masteru, \"%s\", has no home directory", mess); @@ -208,7 +209,19 @@ static int masteru_rmdir_subuhome(void *arg){ //-------------------------------------------------------------------------------- // build strings // -static int mk_subu_user(char **mess, sqlite3 *db, char *masteru_name, int n, char **subu_username){ +static int mk_subu_username(char **mess, sqlite3 *db, char **subu_username){ + int rc,n; + db_begin(db); + if( + (rc = subudb_number_get(db, &n)) + || + (rc = subudb_number_set(db, ++n)) + ){ + db_rollback(db); + return SUBU_ERR_DB_FILE; + } + db_commit(db); + size_t len = 0; FILE* name_stream = open_memstream(subu_username, &len); fprintf(name_stream, "s%d", n); @@ -288,45 +301,15 @@ int subu_mk_0(char **mess, sqlite3 *db, char *subuname){ } //-------------------------------------------------------------------------------- - // lookup the masteru name char *masteru_name = 0; char *masteru_home = 0; - rc = mk_masteru_name(masteru_uid, &masteru_name, &masteru_home); - if(rc) return rc; - #ifdef DEBUG - dbprintf("masteru_name: \"%s\"\n", masteru_name); - #endif - - db_begin(db); - int n; - rc = subudb_number_get(db, masteru_name, &n); - if( rc == SQLITE_OK ){ - n++; - rc = subudb_number_set(db, masteru_name, n); - if( rc != SQLITE_OK ){ - db_rollback(db); - return SUBU_ERR_DB_FILE; - } - }else{ // perhaps this masteru's first subu, so we will try init - n = First_Max_Subunumber; - rc = subudb_number_init(db, masteru_name, n); - if( rc != SQLITE_OK ){ - db_rollback(db); - return SUBU_ERR_DB_FILE; - } - } - db_commit(db); - #ifdef DEBUG - dbprintf("masteru max subunumber: %d\n", n); - #endif - - //-------------------------------------------------------------------------------- - // subu details char *subu_username = 0; char *subuland = 0; char *subuhome = 0; // the name of the directory to put in subuland, not subu_user home dir rc = - mk_subu_user(mess, db, masteru_name, n, &subu_username) + mk_masteru_name(masteru_uid, &masteru_name, &masteru_home) + || + mk_subu_username(mess, db, &subu_username) || mk_subuland(masteru_home, &subuland) || @@ -416,7 +399,7 @@ int subu_mk_0(char **mess, sqlite3 *db, char *subuname){ #endif { int rc = subudb_Masteru_Subu_put(db, masteru_name, subuname, subu_username); - if( rc != SQLITE_DONE ){ + if( rc != SQLITE_OK ){ if(mess)*mess = strdup("insert of masteru subu relation failed"); RETURN(SUBU_ERR_DB_FILE); } @@ -463,6 +446,7 @@ int subu_rm_0(char **mess, sqlite3 *db, char *subuname){ char *masteru_home = 0; char *subuland = 0; char *subuhome = 0; // the name of the directory to put in subuland, not subu_user home dir + char *subu_username = 0; rc = mk_masteru_name(masteru_uid, &masteru_name, &masteru_home) || @@ -480,12 +464,11 @@ int subu_rm_0(char **mess, sqlite3 *db, char *subuname){ db_begin(db); - char *subu_username = 0; rc = subudb_Masteru_Subu_get_subu_username(db, masteru_name, subuname, &subu_username); if( rc != SQLITE_OK ){ if(mess) *mess = strdup("subu requested for removal not found under this masteru in db file"); rc = SUBU_ERR_SUBU_NOT_FOUND; - db_rollback(); + db_rollback(db); RETURN(rc); } #ifdef DEBUG @@ -495,7 +478,7 @@ int subu_rm_0(char **mess, sqlite3 *db, char *subuname){ rc = subudb_Masteru_Subu_rm(db, masteru_name, subuname, subu_username); if( rc != SQLITE_OK ){ if(mess)*mess = strdup("removal of masteru subu relation failed"); - db_rollback(); + db_rollback(db); RETURN(SUBU_ERR_DB_FILE); } #ifdef DEBUG @@ -553,10 +536,11 @@ int subu_rm_0(char **mess, sqlite3 *db, char *subuname){ } #endif char *command = "/usr/sbin/userdel"; - char *argv[3]; + char *argv[4]; argv[0] = command; argv[1] = subu_username; - argv[2] = (char *) NULL; + argv[2] = "-r"; + argv[3] = (char *) NULL; char *envp[1]; envp[0] = (char *) NULL; int dispatch_err = dispatch_exec(argv, envp); diff --git a/src/subudb-init.cli.c b/src/subudb-init.cli.c index 429c98e..714c7e4 100644 --- a/src/subudb-init.cli.c +++ b/src/subudb-init.cli.c @@ -11,10 +11,13 @@ int main(){ fprintf(stderr, "error exit, could not open db file \"%s\"\n", DB_File); return SUBU_ERR_DB_FILE; } + db_begin(db); if( subudb_schema(db) != SQLITE_OK ){ + db_rollback(db); fprintf(stderr, "error exit, opened db file but could not build schema\n"); return SUBU_ERR_DB_FILE; } + db_commit(db); if( sqlite3_close(db) != SQLITE_OK ){ fprintf(stderr, "error exit, could not close the db\n"); return SUBU_ERR_DB_FILE; diff --git a/src/subudb-number.cli.c b/src/subudb-number.cli.c index 265e7e9..60304e3 100644 --- a/src/subudb-number.cli.c +++ b/src/subudb-number.cli.c @@ -9,11 +9,10 @@ Set or get a new maximum subu number. Currently doesn't do the setting part. int main(int argc, char **argv){ - if( argc < 2 || argc > 3){ - fprintf(stderr, "usage: %s masteru_name [n]\n",argv[0]); + if( argc < 1 || argc > 2){ + fprintf(stderr, "usage: %s [n]\n",argv[0]); return SUBU_ERR_ARG_CNT; } - char *masteru_name = argv[1]; int rc; sqlite3 *db; @@ -24,9 +23,9 @@ int main(int argc, char **argv){ return SUBU_ERR_DB_FILE; } - // then arg[2] holds a number to set the max to - if(argc == 3){ - long int i = strtol(argv[2], NULL, 10); + // then arg[1] holds a number to set the max to + if(argc == 2){ + long int i = strtol(argv[1], NULL, 10); if( i < 0 ){ fprintf(stderr, "n must be positive\n"); sqlite3_close(db); @@ -37,17 +36,20 @@ int main(int argc, char **argv){ sqlite3_close(db); return SUBU_ERR_N; } - int n = i; - subudb_number_set(db, masteru_name, n); + rc = subudb_number_set(db, i); + if( rc != SQLITE_OK ){ + fprintf(stderr, "couldn't set Max_Subunumber: %s\n", sqlite3_errmsg(db)); + return SUBU_ERR_N; + } } // read and print the current max int n; - rc = subudb_number_get(db, masteru_name, &n); - if( rc == SQLITE_DONE ){ + rc = subudb_number_get(db, &n); + if( rc == SQLITE_OK ){ printf("%d\n", n); }else{ - fprintf(stderr, "lookup failed %s\n", sqlite3_errmsg(db)); + fprintf(stderr, "couldn't get Max_Subunumber: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return SUBU_ERR_DB_FILE; } diff --git a/src/subudb-rel-put.cli.c b/src/subudb-rel-put.cli.c index f679d24..b19896e 100644 --- a/src/subudb-rel-put.cli.c +++ b/src/subudb-rel-put.cli.c @@ -25,10 +25,9 @@ int main(int argc, char **argv){ }} int ret = subudb_Masteru_Subu_put(db, masteru_name, subuname, subu_username); - if( ret != SQLITE_DONE ){ + if( ret != SQLITE_OK ){ fprintf(stderr, "subudb_Masteru_Subu_put indicates failure by returning %d\n",ret); fprintf(stderr, "sqlite3 issues message, %s\n", sqlite3_errmsg(db)); - printf("put failed\n"); return SUBU_ERR_DB_FILE; } ret = sqlite3_close(db); diff --git a/src/subudb-subus.cli.c b/src/subudb-subus.cli.c new file mode 100644 index 0000000..a5c84a0 --- /dev/null +++ b/src/subudb-subus.cli.c @@ -0,0 +1,47 @@ +/* +Set or get a new maximum subu number. Currently doesn't do the setting part. + +*/ +#include "subudb-subus.cli.h" +#include +#include +#include + +int main(int argc, char **argv){ + + if( argc != 2){ + fprintf(stderr, "usage: %s masteru_name\n",argv[0]); + return SUBU_ERR_ARG_CNT; + } + char *masteru_name = argv[1]; + + int rc; + sqlite3 *db; + rc = sqlite3_open_v2(DB_File, &db, SQLITE_OPEN_READWRITE, NULL); + if( rc != SQLITE_OK ){ + fprintf(stderr, "error exit, could not open db file\n"); + sqlite3_close(db); + return SUBU_ERR_DB_FILE; + } + + subudb_subu_element *sa; + subudb_subu_element *sa_end; + rc = subudb_Masteru_Subu_get_subus(db, masteru_name, &sa, &sa_end); + if( rc == SQLITE_OK ){ + subudb_subu_element *pt = sa; + while( pt != sa_end ){ + printf("%s\n", *pt); + pt++; + } + rc = sqlite3_close(db); + if( rc != SQLITE_OK ){ + fprintf(stderr, "when closing db, %s\n", sqlite3_errmsg(db)); + return SUBU_ERR_DB_FILE; + } + return 0; + } + fprintf(stderr, "lookup failed %s\n", sqlite3_errmsg(db)); + sqlite3_close(db); + return SUBU_ERR_DB_FILE; + +} diff --git a/src/subudb.lib.c b/src/subudb.lib.c index e4e492a..e37c67d 100644 --- a/src/subudb.lib.c +++ b/src/subudb.lib.c @@ -20,6 +20,7 @@ Each of these returns SQLITE_OK upon success #include #include #include +#include //-------------------------------------------------------------------------------- // sqlite transactions don't nest. There is a way to use save points, but still @@ -37,72 +38,60 @@ int db_rollback(sqlite3 *db){ //-------------------------------------------------------------------------------- int subudb_schema(sqlite3 *db){ - char sql[] = - "CREATE TABLE Masteru_Subu(masteru_name TEXT, subuname TEXT, subu_username TEXT);" - "CREATE TABLE Masteru_Max(masteru_name TEXT, max_subu_number INT);" - ; - return sqlite3_exec(db, sql, NULL, NULL, NULL); -} - -//-------------------------------------------------------------------------------- -int subudb_number_init(sqlite3 *db, char *masteru_name, int n){ int rc; - char *sql = "INSERT INTO Masteru_Max (masteru_name, max_subu_number) VALUES (?1, ?2);"; - sqlite3_stmt *stmt; - sqlite3_prepare_v2(db, sql, -1, &stmt, NULL); - sqlite3_bind_text(stmt, 1, masteru_name, -1, SQLITE_STATIC); - sqlite3_bind_int(stmt, 2, n); - rc = sqlite3_step(stmt); - sqlite3_finalize(stmt); - if( rc == SQLITE_DONE ) return SQLITE_OK; - return rc; + + { // build tables + char sql[] = + "CREATE TABLE Masteru_Subu(masteru_name TEXT, subuname TEXT, subu_username TEXT);" + "CREATE TABLE Attribute_Int(attribute TEXT, value INT);" + ; + rc = sqlite3_exec(db, sql, NULL, NULL, NULL); + if(rc != SQLITE_OK) return rc; + } + + { // data initialization + char *sql = "INSERT INTO Attribute_Int (attribute, value) VALUES ('Max_Subunumber', ?1);"; + sqlite3_stmt *stmt; + sqlite3_prepare_v2(db, sql, -1, &stmt, NULL); + sqlite3_bind_int(stmt, 1, First_Max_Subunumber); + rc = sqlite3_step(stmt); + sqlite3_finalize(stmt); + if( rc != SQLITE_DONE ) return rc; + } + + return SQLITE_OK; } -int subudb_number_get(sqlite3 *db, char *masteru_name, int *n){ - char *sql = "SELECT max_subu_number FROM Masteru_Max WHERE masteru_name = ?1;"; +//-------------------------------------------------------------------------------- +int subudb_number_get(sqlite3 *db, int *n){ + char *sql = "SELECT value FROM Attribute_Int WHERE attribute = 'Max_Subunumber';"; sqlite3_stmt *stmt; sqlite3_prepare_v2(db, sql, -1, &stmt, NULL); - sqlite3_bind_text(stmt, 1, masteru_name, -1, SQLITE_STATIC); int rc = sqlite3_step(stmt); if( rc == SQLITE_ROW ){ *n = sqlite3_column_int(stmt,0); rc = sqlite3_step(stmt); sqlite3_finalize(stmt); - if( rc == SQLITE_DONE ) return SQLITE_OK; - return rc; + if( rc != SQLITE_DONE ) return rc; + return SQLITE_OK; } // should have a message return, suppose sqlite3_finalize(stmt); return SQLITE_NOTFOUND; } -// on success returns SQLITE_DONE -int subudb_number_set(sqlite3 *db, char *masteru_name, int n){ +int subudb_number_set(sqlite3 *db, int n){ int rc; - char *sql = "UPDATE Masteru_Max SET max_subu_number = ?1 WHERE masteru_name = ?2;"; + char *sql = "UPDATE Attribute_Int SET value = ?1 WHERE attribute = 'Max_Subunumber';"; sqlite3_stmt *stmt; sqlite3_prepare_v2(db, sql, -1, &stmt, NULL); sqlite3_bind_int(stmt, 1, n); - sqlite3_bind_text(stmt, 2, masteru_name, -1, SQLITE_STATIC); rc = sqlite3_step(stmt); sqlite3_finalize(stmt); if( rc == SQLITE_DONE ) return SQLITE_OK; return rc; } -// returns SQLITE_DONE or an error code -// removes masteru/max_number relation from table -int subudb_number_rm(sqlite3 *db, char *masteru_name){ - char *sql = "DELETE FROM Masteru_Max WHERE masteru_name = ?1;"; - sqlite3_stmt *stmt; - sqlite3_prepare_v2(db, sql, -1, &stmt, NULL); - sqlite3_bind_text(stmt, 1, masteru_name, -1, SQLITE_STATIC); - int rc = sqlite3_step(stmt); - sqlite3_finalize(stmt); - if( rc == SQLITE_DONE ) return SQLITE_OK; - return rc; -} - //-------------------------------------------------------------------------------- // put relation into Masteru_Subu table int subudb_Masteru_Subu_put(sqlite3 *db, char *masteru_name, char *subuname, char *subu_username){ @@ -114,6 +103,7 @@ int subudb_Masteru_Subu_put(sqlite3 *db, char *masteru_name, char *subuname, cha sqlite3_bind_text(stmt, 3, subu_username, -1, SQLITE_STATIC); int rc = sqlite3_step(stmt); sqlite3_finalize(stmt); + if( rc == SQLITE_DONE ) return SQLITE_OK; return rc; } @@ -136,7 +126,7 @@ int subudb_Masteru_Subu_get_subu_username(sqlite3 *db, char *masteru_name, char return rc; // woops this needs to return an error!, be sure it is not SQLITE_DONE } rc = sqlite3_step(stmt); - sqlite3_finalize(stmt); + if( rc == SQLITE_DONE ) return SQLITE_OK; return rc; } @@ -151,41 +141,43 @@ static void expand(void **base, void **pt, size_t *s){ free(base); *base = new_base; *pt = new_base + offset; - s = new_s; + *s = new_s; } static bool off_alloc(void *base, void *pt, size_t s){ return pt == base + s; } // we return and array of subudb_subu_info -struct subudb_subu_info{ +#if INTERFACE +struct subudb_subu_element{ char *subuname; char *subu_username; }; -static void subu_info_alloc(subudb_subu_info **base, size_t *s){ - *s = 4 * sizeof(subudb_subu_info); - *base = malloc(s) +#endif +static void subu_element_alloc(subudb_subu_element **base, size_t *s){ + *s = 4 * sizeof(subudb_subu_element); + *base = malloc(*s); } -static void subu_info_free(subudb_subu_info *base, subu_db_subu_info *end_pt){ - subudb_subu_info *pt = base; +void subu_element_free(subudb_subu_element *base, subudb_subu_element *end_pt){ + subudb_subu_element *pt = base; while( pt != end_pt ){ - pt->free(subuname); - pt->free(subu_username); + free(pt->subuname); + free(pt->subu_username); pt++; } free(base); } -int subudb_Masteru_Subu_get_subu_info +int subudb_Masteru_Subu_get_subus ( sqlite3 *db, char *masteru_name, - subudb_subu_info **si, - subudb_subu_info **si_end + subudb_subu_element **sa_pt, + subudb_subu_element **sa_end_pt ){ char *sql = "SELECT subuname, subu_username" - "FROM Masteru_Subu" - "WHERE masteru_name = ?1;"; + " FROM Masteru_Subu" + " WHERE masteru_name = ?1;"; size_t sql_len = strlen(sql); sqlite3_stmt *stmt; int rc; @@ -193,13 +185,13 @@ int subudb_Masteru_Subu_get_subu_info if( rc != SQLITE_OK ) return rc; sqlite3_bind_text(stmt, 1, masteru_name, strlen(masteru_name), SQLITE_STATIC); - size_t subu_info_size; - subudb_subu_info *subu_info; - subu_info_alloc(&subu_info, &subu_info_size); - subudb_subu_info *pt = subu_info; + size_t subu_element_size; + subudb_subu_element *subu_element; + subu_element_alloc(&subu_element, &subu_element_size); + subudb_subu_element *pt = subu_element; rc = sqlite3_step(stmt); while( rc == SQLITE_ROW ){ - if( off_alloc(subu_info, pt) ) expand(&subu_info, &pt, &subu_info_size); + if( off_alloc(subu_element, pt, subu_element_size) ) expand((void **)&subu_element, (void **)&pt, &subu_element_size); pt->subuname = strdup(sqlite3_column_text(stmt, 0)); pt->subu_username = strdup(sqlite3_column_text(stmt, 1)); rc = sqlite3_step(stmt); @@ -209,9 +201,9 @@ int subudb_Masteru_Subu_get_subu_info if( rc != SQLITE_DONE ){ return rc; // woops this needs to return an error!, be sure it is not SQLITE_DONE } - *si = subu_info; - *si_end = pt; - return SQLTIE_OK; + *sa_pt = subu_element; + *sa_end_pt = pt; + return SQLITE_OK; } @@ -228,5 +220,6 @@ int subudb_Masteru_Subu_rm(sqlite3 *db, char *masteru_name, char *subuname, char sqlite3_bind_text(stmt, 3, subu_username, -1, SQLITE_STATIC); rc = sqlite3_step(stmt); sqlite3_finalize(stmt); + if( rc == SQLITE_DONE ) return SQLITE_OK; return rc; } diff --git a/tools/bin/gitadd b/tools/bin/gitadd index c2f2e02..9355724 100755 --- a/tools/bin/gitadd +++ b/tools/bin/gitadd @@ -1,5 +1,5 @@ #!/bin/bash set -x -make dist_clean +make dist-clean git add "$@"