Changeset 43

Show
Ignore:
Timestamp:
11/10/07 17:23:34 (10 months ago)
Author:
nlawren2
Message:

Compiles!!!, and links too

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • vowfsc/Makefile

    r41 r43  
    22        @echo made $@ 
    33 
    4 db: db.o 
    5         gcc db.o -o db 
     4db: db.o xdelta3.o 
     5        gcc xdelta3.o db.o -lpq -o db 
    66 
    77xdelta: xdelta.o xdelta3.o 
     
    99 
    1010db.o: db.c db.h file.db dir.db stream.db 
    11         gcc db.c -c 
     11        gcc db.c -c -w 
    1212 
    1313xdelta3.o: xdelta3.c xdelta3.h xdelta3-cfgs.h xdelta3-list.h xdelta3-decode.h 
  • vowfsc/db.c

    r42 r43  
    44struct{ 
    55#define db( type, name ) int name; 
    6 #define db_string( type, name ) int name; 
     6#define db_string( name ) int name; 
    77#include "file.db" 
    88} file_format; 
     
    1111struct{ 
    1212#define db( type, name ) int name; 
    13 #define db_string( type, name ) int name; 
     13#define db_string( name ) int name; 
    1414#include "dir.db" 
    1515} dir_format; 
    1616int NUM_DIR_FIELDS; 
     17 
     18struct{ 
     19#define db( type, name ) int name; 
     20#define db_string( name ) int name; 
     21#include "stream.db" 
     22} stream_format; 
     23int NUM_STREAM_FIELDS; 
    1724 
    1825 
     
    3037 
    3138// Begin fuction implementation 
    32 char *normalize_dir_name( char *dir_name ){ // <- Tested 
     39char *normalize_dir_name( char *dir_name ){ 
    3340        list *temp, *list_tail, *list_head; 
    3441        list_tail=list_head=malloc(sizeof(list)); 
     
    114121 
    115122 
     123int db_get_max_file_revision( int file_id ){ 
     124        // Make the request 
     125        char pq_request[BUFFER_SIZE]; 
     126        sprintf(pq_request,"SELECT MAX(revision_id) " 
     127                           "FROM file " 
     128                           "WHERE file_id = \'%i\'", 
     129                           file_id); 
     130        PGresult *res=PQexec(pq_conn,pq_request); 
     131 
     132        if( PQresultStatus(res) != PGRES_TUPLES_OK ) return NULL; 
     133 
     134        // The result should be in the first row of the first column 
     135        int revision=*(int*)PQgetvalue(res,0,0); 
     136 
     137        PQfreemem(res); 
     138 
     139        return revision; 
     140} 
     141 
     142 
     143 
    116144int db_get_file_id( char *file_path ){ 
    117145        // Find the last '/' 
    118146        char *file_name=NULL; 
    119         while( *file_path ){ 
     147        while( *file_path++ ) 
    120148                if( *file_path =='/' ) 
    121149                        file_name=file_path+1; 
    122                 ++file_path; 
    123         } 
    124150 
    125151        // Copy and normalize the directory name 
    126152        char *tmp_dir_name=malloc(file_name-file_path); 
    127         memcpy(tmp_dir_name,file_path,file_name-file_path): 
     153        memcpy(tmp_dir_name,file_path,file_name-file_path); 
    128154        char *dir_name=normalize_dir_name(tmp_dir_name); 
    129155        free(tmp_dir_name); 
     
    148174 
    149175 
    150 file_t db_get_file( int file_id ){ 
    151         file_t stat
     176file_t *db_get_file( int file_id ){ 
     177        file_t *stat=malloc(sizeof(file_t))
    152178 
    153179        char pq_request[BUFFER_SIZE]; 
     
    177203 
    178204        // Fill stat 
    179 #define db(type, name)  stat.name = *(type*)PQgetvalue(res, 0, file_format.name ); 
    180 #define db_string(name) stat.name = strdup(PQgetvalue(res, 0, file_format.name )); 
     205#define db(type, name)  stat->name = *(type*)PQgetvalue(res, 0, file_format.name ); 
     206#define db_string(name) stat->name = strdup(PQgetvalue(res, 0, file_format.name )); 
    181207#include "file.db" 
    182208         
     
    187213 
    188214 
    189 file_t db_get_file( int file_id, int revision ){ 
    190         file_t stat
     215file_t *db_get_file_rev( int file_id, int revision ){ 
     216        file_t *stat=malloc(sizeof(file_t))
    191217 
    192218        char pq_request[BUFFER_SIZE]; 
     
    217243 
    218244        // Fill stat 
    219 #define db(type, name)  stat.name = *(type*)PQgetvalue(res, /*row*/, file_format.name ); 
    220 #define db_string(name) stat.name = strdup(PQgetvalue(res, /*row*/, file_format.name )); 
     245#define db(type, name)  stat->name = *(type*)PQgetvalue(res, 0, file_format.name ); 
     246#define db_string(name) stat->name = strdup(PQgetvalue(res, 0, file_format.name )); 
    221247#include "file.db" 
    222248         
     
    224250 
    225251        return stat; 
    226 } 
    227  
    228 int db_get_max_file_revision( int file_id ){ 
    229         // Make the request 
    230         char pq_request[BUFFER_SIZE]; 
    231         sprintf(pq_request,"SELECT MAX(revision_id) " 
    232                            "FROM file " 
    233                            "WHERE file_id = \'%i\'", 
    234                            file_id); 
    235         PGresult *res=PQexec(pq_conn,pq_request); 
    236  
    237         if( PQresultStatus(res) != PGRES_TUPLES_OK ) return NULL; 
    238  
    239         // The result should be in the first row of the first column 
    240         int revision=*(int*)PQgetvalue(res,0,0); 
    241  
    242         PQfreemem(res); 
    243  
    244         return revision; 
    245  
    246252} 
    247253 
     
    252258                           "WHERE file_id = \'%i\'" 
    253259                           "AND revision_id = (SELECT MAX(revision_id) FROM file WHERE file_id = 'some_id')", 
    254                            file_id,revision); 
     260                           file_id); 
    255261        PGresult *res=PQexec(pq_conn,pq_request); 
    256262 
     
    267273 
    268274 
    269 char *db_get_file_data( int file_id, int revision ){ 
    270         int i = get_max_file_revision(file_id); 
     275char *db_get_file_rev_data( int file_id, int revision ){ 
     276        int i = db_get_max_file_revision(file_id); 
    271277        char *data, *diff, *temp; 
    272278 
     
    282288 
    283289        int data_len=PQgetlength(res,0,0), diff_len, temp_len; 
    284         char *data=malloc(data_len), *temp, *diff
     290        data=malloc(data_len)
    285291        memcpy(data,PQgetvalue(res,0,0),data_len); 
    286292 
     
    326332                           "FROM directory " 
    327333                           "WHERE directory_path = \'%s\' " 
    328                            "AND revision_id = (SELECT MAX(revision_id) FROM directory WHERE directory_path = 'some_path')" 
     334                           "AND revision_id = (SELECT MAX(revision_id) FROM directory WHERE directory_path = 'some_path')", 
    329335                           dir_name); 
    330336        PGresult *res=PQexec(pq_conn,pq_request); 
     
    341347 
    342348 
    343 dir_t db_get_dir( int dir_id ){ 
    344         dir_t stat
     349dir_t *db_get_dir( int dir_id ){ 
     350        dir_t *stat=malloc(sizeof(dir_t))
    345351 
    346352        char pq_request[BUFFER_SIZE]; 
     
    370376 
    371377        // Fill stat 
    372 #define db(type, name)  stat.name = *(type*)PQgetvalue(res, /*row*/, dir_format.name ); 
    373 #define db_string(name) stat.name = strdup(PQgetvalue(res, /*row*/, dir_format.name )); 
     378#define db(type, name)  stat->name = *(type*)PQgetvalue(res, 0, dir_format.name ); 
     379#define db_string(name) stat->name = strdup(PQgetvalue(res, 0, dir_format.name )); 
    374380#include "dir.db" 
    375381         
     
    380386 
    381387 
    382 dir_t db_get_dir( int dir_id, int revision ){ 
    383         dir_t stat
     388dir_t *db_get_dir_rev( int dir_id, int revision ){ 
     389        dir_t *stat=malloc(sizeof(dir_t))
    384390 
    385391        char pq_request[BUFFER_SIZE]; 
     
    410416 
    411417        // Fill stat 
    412 #define db(type, name)  stat.name = *(type*)PQgetvalue(res, 0, dir_format.name ); 
    413 #define db_string(name) stat.name = strdup(PQgetvalue(res, 0, dir_format.name )); 
     418#define db(type, name)  stat->name = *(type*)PQgetvalue(res, 0, dir_format.name ); 
     419#define db_string(name) stat->name = strdup(PQgetvalue(res, 0, dir_format.name )); 
    414420#include "dir.db" 
    415421         
     
    461467 
    462468 
    463 stream_t db_get_stream( int stream_id ){ 
    464         stream_t stat
     469stream_t *db_get_stream( int stream_id ){ 
     470        stream_t *stat=malloc(sizeof(stream_t))
    465471 
    466472        char pq_request[BUFFER_SIZE]; 
     
    490496 
    491497        // Fill stat 
    492 #define db(type, name)  stat.name = *(type*)PQgetvalue(res, 0, stream_format.name ); 
    493 #define db_string(name) stat.name = strdup(PQgetvalue(res, 0, stream_format.name )); 
    494 #include "stream.db" 
    495          
    496         PQfreemem(res); 
    497  
    498         return stat; 
    499 
    500  
    501 stream_t db_get_stream( int stream_id, int revision ){ 
    502         stream_t stat; 
    503  
    504         char pq_request[BUFFER_SIZE]; 
    505         sprintf(pq_request,"SELECT * " 
    506                            "FROM stream " 
    507                            "WHERE stream_id = \'%i\' " 
    508                            "AND revision_id = \'%i\'", 
    509                            stream_id, revision); 
    510         PGresult *res=PQexec(pq_conn,pq_request); 
    511  
    512         if( NUM_FILE_FIELDS ){ 
    513                 NUM_FILE_FIELDS = sizeof(stream_format)/4; 
    514  
    515                 if( PQnfields(res) != NUM_FILE_FIELDS ){ 
    516                         NUM_FILE_FIELDS = 0; 
    517                         return NULL; 
    518                 } 
    519  
    520         // Fill stream_format with column numbers 
    521 #define db(type, name)  stream_format.name = PQfnumber(res, #name ); 
    522 #define db_string(name) stream_format.name = PQfnumber(res, #name ); 
    523 #include "stream.db" 
    524         } 
    525  
    526         if( PQresultStatus(res) != PGRES_TUPLES_OK ) return NULL; 
    527          
    528         if( PQnfields(res) != NUM_FILE_FIELDS ) return NULL; 
    529  
    530         // Fill stat 
    531 #define db(type, name)  stat.name = *(type*)PQgetvalue(res, 0, stream_format.name ); 
    532 #define db_string(name) stat.name = strdup(PQgetvalue(res, 0, stream_format.name )); 
     498#define db(type, name)  stat->name = *(type*)PQgetvalue(res, 0, stream_format.name ); 
     499#define db_string(name) stat->name = strdup(PQgetvalue(res, 0, stream_format.name )); 
    533500#include "stream.db" 
    534501         
     
    622589                            "%i, %i, \'%s\', \'%s\', %i", 
    623590                            file_uid, file_id, dir_name, file_name, stream_id); 
    624         PQexec(pq_conn, pq_request); 
     591        PQfreemem(PQexec(pq_conn, pq_request)); 
    625592 
    626593        return file_id; 
     
    631598        char pq_request[BUFFER_SIZE]; 
    632599        sprintf(pq_request, "SELECT * " 
     600                            "FROM directory " 
    633601                            "WHERE directory_id = %i", 
    634602                            dir_id); 
     603        PGresult *res=PQexec(pq_conn,pq_request); 
     604 
    635605        if( PQresultStatus(res) != PGRES_TUPLES_OK ) return NULL; 
    636606 
    637607        *length = PQntuples(res); 
    638         file_t *listing=malloc(*length * sizeof(dir_t)*); 
     608        dir_t *listing=malloc(*length * sizeof(dir_t)); 
    639609 
    640610 
     
    667637 
    668638 
    669 file_t *db_get_file_subfiles( int file_id, int *length ){ 
     639file_t *db_get_dir_files( int dir_id, int *length ){ 
    670640        char pq_request[BUFFER_SIZE]; 
    671641        sprintf(pq_request, "SELECT * " 
    672                             "WHERE fileectory_id = %i", 
    673                             file_id); 
     642                            "FROM file " 
     643                            "WHERE directory_id = %i", 
     644                            dir_id); 
     645        PGresult *res=PQexec(pq_conn,pq_request); 
     646 
    674647        if( PQresultStatus(res) != PGRES_TUPLES_OK ) return NULL; 
    675648 
    676649        *length = PQntuples(res); 
    677         file_t *listing=malloc(*length * sizeof(file_t)*); 
     650        file_t *listing=malloc(*length * sizeof(file_t)); 
    678651 
    679652 
     
    710683                            "WHERE file_id = %i AND revision_id = %i", 
    711684                            file_id, revision_id); 
    712         PQexec(pq_request); 
     685        PGresult *res = PQexec(pq_conn, pq_request); 
    713686         
    714687        if( PQresultStatus(res) != PGRES_TUPLES_OK ) return NULL; 
     
    722695 
    723696int db_remove_file( int file_id ){ 
    724         file_t file = db_get_file( file_id ); 
     697        file_t file = *db_get_file( file_id ); 
    725698 
    726699        int file_uid = db_get_max_file_uid() + 1; 
     
    760733        PQfreemem(PQexec(pq_conn, pq_request)); 
    761734 
    762         return revision
     735        return file.revision_id
    763736} 
    764737 
     
    767740        if( !new_file_path && !new_file_name ) return NULL; 
    768741 
    769         file_t file = db_get_file( file_id ); 
    770          
    771         int file_id = db_get_max_file_id() +1; 
    772         int file_uid = db_get_max_file_uid() +1; 
     742        file_t file = *db_get_file( file_id ); 
     743         
     744        int new_file_id = db_get_max_file_id() + 1; 
     745        int file_uid = db_get_max_file_uid() + 1; 
    773746 
    774747        int parent_file_id = db_get_file_uid( file_id, revision_id ); 
    775748 
    776         char *new_dir_name 
     749        char *new_dir_name; 
    777750        if( new_file_path ) 
    778751                new_dir_name = normalize_dir_name(new_file_path); 
    779752        else 
    780                 new_dir_name = file.directory_name
     753                new_dir_name = file.directory_path
    781754        int new_dir_id = db_get_dir_id( new_dir_name ); 
    782755         
     
    795768                            "VALUES " 
    796769                            "%i, %i, 0, %i, %i, %i, NOW, FALSE, %s, %s, %s", 
    797                             file_uid, file_id, file.file_length, parent_file_id, 
     770                            file_uid, new_file_id, file.file_length, parent_file_id, 
    798771                            file.stream_id, new_file_name, new_dir_name,  
    799772                            new_dir_id, data); 
    800773        PQfreemem(PQexec(pq_conn, pq_request)); 
    801774         
    802         return revision
     775        return file.revision_id
    803776} 
    804777 
    805778 
    806779int db_modify_file_stream( int file_id, char *new_stream_name, char *new_stream ){ 
    807         stream_t stream = db_get_file_stream( file_id ); 
    808         file_t file = db_get_file( file_id ); 
     780        stream_t stream = *db_get_file_stream( file_id ); 
     781        file_t file = *db_get_file( file_id ); 
    809782 
    810783        if( !new_stream_name ) new_stream_name = stream.stream_name; 
     
    856829int db_modify_file_data( int file_id, char *data, int data_len ){ 
    857830        if( !data ) return NULL; 
     831        file_t file = *db_get_file( file_id ); 
    858832 
    859833        int file_uid = db_get_max_file_uid() +1; 
     
    899873} 
    900874 
     875stream_t *db_get_file_stream( int file_id ){ 
     876        stream_t *stat=malloc(sizeof(stream_t)); 
     877         
     878        char pq_request[BUFFER_SIZE]; 
     879        sprintf(pq_request,"SELECT stream_id " 
     880                           "FROM file " 
     881                           "WHERE file_id = \'%i\' " 
     882                           "AND revision_id = MAX( SELECT revision_id FROM file WHERE file_id = \'%i\')", 
     883                           file_id, file_id); 
     884        PGresult *res=PQexec(pq_conn,pq_request); 
     885 
     886        if( PQresultStatus(res) != PGRES_TUPLES_OK ) return NULL; 
     887 
     888        int stream_id = PQgetvalue(res, 0,0); 
     889 
     890        PQfreemem(res); 
     891 
     892        sprintf(pq_request,"SELECT * " 
     893                           "FROM stram " 
     894                           "WHERE stream_id = \'%i\' ", 
     895                           stream_id); 
     896        res=PQexec(pq_conn,pq_request); 
     897 
     898        if( NUM_STREAM_FIELDS ){ 
     899                NUM_STREAM_FIELDS = sizeof(stream_format)/4; 
     900 
     901                if( PQnfields(res) != NUM_STREAM_FIELDS ){ 
     902                        NUM_STREAM_FIELDS = 0; 
     903                        return NULL; 
     904                } 
     905 
     906        // Fill stream_format with column numbers 
     907#define db(type, name)  stream_format.name = PQfnumber(res, #name ); 
     908#define db_string(name) stream_format.name = PQfnumber(res, #name ); 
     909#include "stream.db" 
     910        } 
     911 
     912        if( PQresultStatus(res) != PGRES_TUPLES_OK ) return NULL; 
     913         
     914        if( PQnfields(res) != NUM_STREAM_FIELDS ) return NULL; 
     915 
     916        // Fill stat 
     917#define db(type, name)  stat->name = *(type*)PQgetvalue(res, 0, stream_format.name ); 
     918#define db_string(name) stat->name = strdup(PQgetvalue(res, 0, stream_format.name )); 
     919#include "stream.db" 
     920         
     921        PQfreemem(res); 
     922 
     923        return stat; 
     924} 
     925 
     926stream_t *db_get_file_rev_stream( int file_id, int revision_id ){ 
     927        stream_t *stat=malloc(sizeof(stream_t)); 
     928         
     929        char pq_request[BUFFER_SIZE]; 
     930        sprintf(pq_request,"SELECT stream_id " 
     931                           "FROM file " 
     932                           "WHERE file_id = \'%i\' " 
     933                           "AND revision_id = \'%i\' ", 
     934                           file_id, revision_id); 
     935        PGresult *res=PQexec(pq_conn,pq_request); 
     936 
     937        if( PQresultStatus(res) != PGRES_TUPLES_OK ) return NULL; 
     938 
     939        int stream_id = PQgetvalue(res, 0,0); 
     940 
     941        PQfreemem(res); 
     942 
     943        sprintf(pq_request,"SELECT * " 
     944                           "FROM stram " 
     945                           "WHERE stream_id = \'%i\' ", 
     946                           stream_id); 
     947        res=PQexec(pq_conn,pq_request); 
     948 
     949        if( NUM_STREAM_FIELDS ){ 
     950                NUM_STREAM_FIELDS = sizeof(stream_format)/4; 
     951 
     952                if( PQnfields(res) != NUM_STREAM_FIELDS ){ 
     953                        NUM_STREAM_FIELDS = 0; 
     954                        return NULL; 
     955                } 
     956 
     957        // Fill stream_format with column numbers 
     958#define db(type, name)  stream_format.name = PQfnumber(res, #name ); 
     959#define db_string(name) stream_format.name = PQfnumber(res, #name ); 
     960#include "stream.db" 
     961        } 
     962 
     963        if( PQresultStatus(res) != PGRES_TUPLES_OK ) return NULL; 
     964         
     965        if( PQnfields(res) != NUM_STREAM_FIELDS ) return NULL; 
     966 
     967        // Fill stat 
     968#define db(type, name)  stat->name = *(type*)PQgetvalue(res, 0, stream_format.name ); 
     969#define db_string(name) stat->name = strdup(PQgetvalue(res, 0, stream_format.name )); 
     970#include "stream.db" 
     971         
     972        PQfreemem(res); 
     973 
     974        return stat; 
     975} 
     976 
  • vowfsc/db.h

    r40 r43  
    2424 
    2525typedef struct dir dir_t; 
    26 struct dir_t
     26struct dir
    2727#define db( type, name ) type name; 
    2828#define db_string( name ) char *name; 
     
    5757 * look at the file.db file. 
    5858 */ 
    59 file_t db_get_file( int file_id ); 
    60 file_t db_get_file( int file_id, int revision ); 
     59file_t *db_get_file( int file_id ); 
     60file_t *db_get_file_rev( int file_id, int revision ); 
    6161 
    6262/* db_get_file_data returns the undiffed data from  
     
    6565 */ 
    6666char *db_get_file_data( int file_id ); 
    67 char *db_get_file_data( int file_id, int revision ); 
     67char *db_get_file_rev_data( int file_id, int revision ); 
    6868 
    6969 
     
    7272 * db_get_file_data 
    7373 */ 
    74 char *db_get_file_stream( int file_id ); 
    75 char *db_get_file_stream( int file_id, int revision ); 
     74stream_t *db_get_file_stream( int file_id ); 
     75stream_t *db_get_file_rev_stream( int file_id, int revision ); 
    7676 
    7777/* Looks first to see if the given stream exists, and 
     
    140140 * struct, look at the dir.db file. 
    141141 */ 
    142 dir_t db_get_dir( int dir_id ); 
    143 dir_t db_get_dir( int dir_id, int revision ); 
     142dir_t *db_get_dir( int dir_id ); 
     143dir_t *db_get_dir_rev( int dir_id, int revision ); 
    144144 
    145145 
  • vowfsc/dir.db

    r42 r43  
    88 
    99db_string(directory_path) 
     10 
  • vowfsc/file.db

    r40 r43  
    1212db_string(file_name) 
    1313db_string(directory_path) 
     14