Changeset 54

Show
Ignore:
Timestamp:
11/12/07 18:42:45 (10 months ago)
Author:
nlawren2
Message:

Fixed more stuff

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • vowfsc/Makefile

    r53 r54  
    33 
    44db_test: test.o db.o xdelta3.o 
    5         gcc test.o xdelta3.o db.o -lpq -o test 
     5        gcc test.o xdelta3.o db.o -lpq -o db_test 
    66 
    77xdelta_test: xdelta.o xdelta3.o 
     8        gcc xdelta.o xdelta3.o -o xdelta_test 
    89 
    910xdelta.o: xdelta.c 
  • vowfsc/db-util.h

    r52 r54  
    22 
    33#ifdef DEBUG 
    4         #define db_debug_rq( function ) printf("%s: %s\n", #function, pq_request) 
     4        #define db_debug_rq( function ) printf("\n%s: %s\n", #function, pq_request) 
    55#else 
    66        #define db_debug_rq( function ) 
  • vowfsc/db.c

    r52 r54  
    199199        int revision_id=atoi(PQgetvalue(res,0,0)); 
    200200 
    201         PQfreemem(res); 
     201        PQclear(res); 
    202202 
    203203        return revision_id; 
     
    229229        free(dir_name); 
    230230        free(file_name); 
    231         PQfreemem(res); 
     231        PQclear(res); 
    232232 
    233233        return file_id; 
     
    255255        db_parse_file_res(res, stat); 
    256256 
    257         PQfreemem(res); 
     257        PQclear(res); 
    258258 
    259259        return stat; 
     
    280280        db_parse_file_res(res, stat); 
    281281         
    282         PQfreemem(res); 
     282        PQclear(res); 
    283283 
    284284        return stat; 
     
    287287char *db_get_file_data( int file_id ){ 
    288288        char pq_request[BUFFER_SIZE]; 
    289         sprintf(pq_request,"SELECT diff
     289        sprintf(pq_request,"SELECT data
    290290                           "FROM file " 
    291291                           "WHERE file_id = \'%i\' " 
    292292                           "AND revision_id = (SELECT MAX(revision_id) FROM file WHERE file_id = \'%i\')", 
    293293                           file_id, file_id); 
     294        db_debug_rq(db_get_file_data); 
    294295        PGresult *res=PQexec(pq_conn,pq_request); 
    295296 
     
    299300        char *data=malloc(data_len); 
    300301        memcpy(data,PQgetvalue(res,0,0),data_len); 
    301  
    302         PQfreemem(res); 
    303  
    304         return data; 
     302        int udata_len; 
     303        char *udata=PQunescapeBytea(data,&udata_len); 
     304 
     305        free(data); 
     306        PQclear(res); 
     307 
     308        return udata; 
    305309} 
    306310 
     
    309313        int i = db_get_file_max_revision(file_id); 
    310314        char *data, *diff, *temp; 
    311  
    312         char pq_request[BUFFER_SIZE]; 
    313         sprintf(pq_request,"SELECT diff
     315         
     316        char pq_request[BUFFER_SIZE]; 
     317        sprintf(pq_request,"SELECT data
    314318                           "FROM file " 
    315319                           "WHERE file_id = \'%i\' " 
     
    323327        data=malloc(data_len); 
    324328        memcpy(data,PQgetvalue(res,0,0),data_len); 
    325  
    326         PQfreemem(res); 
     329        int udata_len; 
     330        char *udata=PQunescapeBytea(data,&udata_len); 
     331        free(data); 
     332 
     333        PQclear(res); 
    327334 
    328335        while( --i >= revision_id ){ 
    329336                char pq_request[BUFFER_SIZE]; 
    330                 sprintf(pq_request,"SELECT diff
     337                sprintf(pq_request,"SELECT data
    331338                                   "FROM file " 
    332339                                   "WHERE file_id = \'%i\' " 
    333340                                   "AND revision_id = \'%i\'", 
    334341                                   file_id,i); 
     342                db_debug_rq(db_get_file_rev_udata); 
    335343                PGresult *res=PQexec(pq_conn,pq_request); 
    336344 
     
    338346 
    339347                diff_len=PQgetlength(res,0,0); 
    340                 diff=malloc(data_len); 
    341                  
     348                diff=malloc(diff_len); 
     349                memcpy(diff,PQgetvalue(res,0,0),diff_len); 
     350 
     351                int udiff_len; 
     352                char *udiff = PQunescapeBytea(diff,&udiff_len); 
     353 
    342354                temp=malloc(XD3_ALLOCSIZE); 
    343355 
    344                 xd3_decode_memory(diff, diff_len, 
    345                                   data, data_len, 
     356                xd3_decode_memory(udiff, udiff_len, 
     357                                  udata, udata_len, 
    346358                                  temp, &temp_len, XD3_ALLOCSIZE, 
    347359                                  0); 
    348360                 
    349361                free(diff); 
    350                 free(data); 
    351                 data = temp; 
    352                 data_len = temp_len; 
     362                PQfreemem(udata); 
     363                PQfreemem(udiff); 
     364                PQclear(res); 
     365                udata = temp; 
     366                udata_len = temp_len; 
    353367        } 
    354368 
    355         return data; 
     369        return udata; 
    356370} 
    357371 
     
    378392        // Clean up and return 
    379393        free(dir_name); 
    380         PQfreemem(res); 
     394        PQclear(res); 
    381395 
    382396        return dir_id; 
     
    397411        db_parse_dir_res(res,stat); 
    398412 
    399         PQfreemem(res); 
     413        PQclear(res); 
    400414 
    401415        return stat; 
     
    416430        db_parse_dir_res( res, stat ); 
    417431 
    418         PQfreemem(res); 
     432        PQclear(res); 
    419433 
    420434        return stat; 
     
    435449        int revision_id=atoi(PQgetvalue(res,0,0)); 
    436450 
    437         PQfreemem(res); 
     451        PQclear(res); 
    438452 
    439453        return revision_id; 
     
    498512#include "stream.db" 
    499513         
    500         PQfreemem(res); 
     514        PQclear(res); 
    501515 
    502516        return stat; 
     
    510524        int stream_id=atoi(PQgetvalue(res,0,0)); 
    511525 
    512         PQfreemem(res); 
     526        PQclear(res); 
    513527 
    514528        return stream_id; 
     
    530544                stream_id = atoi(PQgetvalue(res,0,0)); 
    531545        }else{ 
    532                 PQfreemem(res); 
     546                PQclear(res); 
    533547                stream_id = db_get_stream_max_id() + 1; 
    534548                 
    535                 sprintf(pq_request, "INSERT stream " 
     549                sprintf(pq_request, "INSERT INTO stream " 
    536550                                    "(stream_id, stream_name, stream) " 
    537551                                    "VALUES" 
    538552                                    "\'%i\',  \'%s\', \'%s\'", 
    539553                                    stream_id, stream_name, stream); 
    540                 PQfreemem(PQexec(pq_conn,pq_request)); 
     554                PQclear(PQexec(pq_conn,pq_request)); 
    541555        } 
    542556        return stream_id; 
     
    551565        int file_id=atoi(PQgetvalue(res,0,0)); 
    552566 
    553         PQfreemem(res); 
     567        PQclear(res); 
    554568 
    555569        return file_id; 
     
    563577        int file_uid=atoi(PQgetvalue(res,0,0)); 
    564578 
    565         PQfreemem(res); 
     579        PQclear(res); 
    566580 
    567581        return file_uid; 
     
    585599        db_split_file_name(file_path, &dir_name, &file_name); 
    586600 
     601        int now = time(NULL); 
     602 
    587603        // Make the PGSQL request 
    588604        char pq_request[BUFFER_SIZE]; 
    589605        sprintf(pq_request, "INSERT INTO file " 
    590                             "(file_uid, file_id, revision_id, directory_path, file_name, stream_id) " 
     606                            "(file_uid, file_id, revision_id, directory_path, file_name, stream_id, end_time) " 
    591607                            "VALUES " 
    592                             "(\'%i\', \'%i\', \'%i\', \'%s\', \'%s\', \'%i\')", 
    593                             file_uid, file_id, revision_id, dir_name, file_name, stream_id); 
     608                            "(\'%i\', \'%i\', \'%i\', \'%s\', \'%s\', \'%i\', \'%i\')", 
     609                            file_uid, file_id, revision_id, dir_name, file_name, stream_id, now); 
    594610        db_debug_rq(db_create_file); 
    595611        PGresult *res = PQexec(pq_conn, pq_request); 
     
    601617        free(dir_name); 
    602618        free(file_name); 
    603         PQfreemem(res); 
     619        PQclear(res); 
    604620         
    605621        return file_id; 
     
    624640                db_parse_dir_res(res, &listing[i]); 
    625641         
    626         PQfreemem(res); 
     642        PQclear(res); 
    627643 
    628644        return listing; 
     
    647663                db_parse_file_res(res, &listing[i]); 
    648664         
    649         PQfreemem(res); 
     665        PQclear(res); 
    650666 
    651667        return listing; 
     
    655671        char pq_request[BUFFER_SIZE]; 
    656672        sprintf(pq_request, "SELECT file_uid " 
     673                            "FROM file " 
    657674                            "WHERE file_id = \'%i\' AND revision_id = \'%i\'", 
    658675                            file_id, revision_id); 
     676        db_debug_rq(db_get_file_id); 
    659677        PGresult *res = PQexec(pq_conn, pq_request); 
    660678         
     
    662680 
    663681        int file_uid = atoi(PQgetvalue(res, 0,0)); 
    664  
    665         PQfreemem(res); 
    666  
    667         return file_id; 
     682        PQclear(res); 
     683 
     684        return file_uid; 
    668685} 
    669686 
     
    682699        char *diff=malloc(XD3_ALLOCSIZE); 
    683700        int diff_len; 
    684  
     701        printf("DATA!: %s(%i)(%i)\n",data,data_len,strlen(data)); 
    685702        xd3_encode_memory(data, data_len, 
    686703                          data, data_len, 
    687704                          diff, &diff_len, XD3_ALLOCSIZE, 
    688705                          0); 
    689          
    690         char pq_request[BUFFER_SIZE]; 
    691         sprintf(pq_request, "INSERT file " 
     706 
     707        int now = time(NULL); 
     708         
     709        int udata_len; 
     710        char *udata = PQescapeByteaConn(pq_conn,data,data_len,&udata_len); 
     711 
     712        char pq_request[BUFFER_SIZE]; 
     713        sprintf(pq_request, "INSERT INTO file " 
    692714                            "(file_uid, file_id, revision_id, file_length, " 
    693715                            "parent_file_id, stream_id, end_time, deleted_flag, " 
    694716                            "file_name, directory_path, directory_id, data) " 
    695717                            "VALUES " 
    696                             "\'%i\', \'%i\', \'%i\', \'%i\', \'%i\', \'%i\', \'NOW\', " 
    697                             "\'TRUE\', \'%s\', \'%s\', \'%s\'", 
     718                            "(\'%i\', \'%i\', \'%i\', \'%i\', \'%i\', \'%i\', \'%i\', " 
     719                            "\'t\', \'%s\', \'%s\', \'%i\', \'%s\')", 
    698720                            file_uid, file_id, file.revision_id, file.file_length, 
    699                             parent_file_id, file.stream_id, file.file_name,  
    700                             file.directory_path, file.directory_id, data); 
    701         PQfreemem(PQexec(pq_conn, pq_request)); 
    702                  
     721                            parent_file_id, file.stream_id, now, file.file_name,  
     722                            file.directory_path, file.directory_id, udata); 
     723        db_debug_rq(db_remove_file); 
     724        PGresult *res = PQexec(pq_conn, pq_request); 
     725        PQclear(res); 
     726         
     727        PQfreemem(udata); 
     728        udata = PQescapeByteaConn(pq_conn,data,data_len,&udata_len); 
     729         
    703730        // Insert the diff into the old file 
    704731        sprintf(pq_request, "UPDATE file " 
    705732                            "SET data = \'%s\' " 
    706733                            "WHERE file_uid = \'%i\'", 
    707                             diff, parent_file_id); 
    708         PQfreemem(PQexec(pq_conn, pq_request)); 
     734                            udata, parent_file_id); 
     735        db_debug_rq(db_remove_file); 
     736        res = PQexec(pq_conn, pq_request); 
     737        PQclear(res); 
     738        PQfreemem(udata); 
    709739 
    710740        return file.revision_id; 
     
    737767        // Insert the new file 
    738768        char pq_request[BUFFER_SIZE]; 
    739         sprintf(pq_request, "INSERT file " 
     769        sprintf(pq_request, "INSERT INTO file " 
    740770                            "(file_uid, file_id, revision_id, file_length, " 
    741771                            "parent_file_id, stream_id, end_time, deleted_flag, " 
     
    747777                            file.stream_id, new_file_name, new_dir_name,  
    748778                            new_dir_id, data); 
    749         PQfreemem(PQexec(pq_conn, pq_request)); 
     779        PQclear(PQexec(pq_conn, pq_request)); 
    750780         
    751781        return file.revision_id; 
     
    782812        // Insert the new file 
    783813        char pq_request[BUFFER_SIZE]; 
    784         sprintf(pq_request, "INSERT file " 
     814        sprintf(pq_request, "INSERT INTO file " 
    785815                            "(file_uid, file_id, revision_id, file_length, " 
    786816                            "parent_file_id, stream_id, end_time, deleted_flag, " 
     
    792822                            parent_file_id, new_stream_id, file.file_name,  
    793823                            file.directory_path, file.directory_id, data); 
    794         PQfreemem(PQexec(pq_conn, pq_request)); 
     824        PQclear(PQexec(pq_conn, pq_request)); 
    795825         
    796826        // Insert the diff into the old file 
     
    799829                            "WHERE file_uid = \'%i\'", 
    800830                            diff, parent_file_id); 
    801         PQfreemem(PQexec(pq_conn, pq_request)); 
     831        PQclear(PQexec(pq_conn, pq_request)); 
    802832 
    803833        return file.revision_id; 
     
    808838        file_t file = *db_get_file( file_id ); 
    809839 
    810         int file_uid = db_get_file_max_uid() +1; 
     840        int file_uid = db_get_file_max_uid() + 1; 
    811841 
    812842        int parent_file_id = db_get_file_uid( file_id, file.revision_id ); 
    813843        file.revision_id++; 
    814844 
    815         char old_data=db_get_file_data( file_id ); 
     845        int now = time(NULL); 
     846 
     847        int escaped_len; 
     848        char *escaped=PQescapeByteaConn(pq_conn,data,data_len,&escaped_len); 
     849 
    816850        int old_data_len = file.file_length; 
     851        char *old_data=db_get_file_data( file_id ); 
     852         
     853        // Insert the new file 
     854        char pq_request[BUFFER_SIZE]; 
     855        sprintf(pq_request, "INSERT INTO file " 
     856                            "(file_uid, file_id, revision_id, file_length, " 
     857                            "parent_file_id, stream_id, end_time, deleted_flag, " 
     858                            "file_name, directory_path, directory_id, data) " 
     859                            "VALUES " 
     860                            "(\'%i\', \'%i\', \'%i\', \'%i\', \'%i\', \'%i\', \'%i\', " 
     861                            "\'0\', \'%s\', \'%s\', \'%i\', \'%s\')", 
     862                            file_uid, file_id, file.revision_id, data_len, 
     863                            parent_file_id, file.stream_id, now, file.file_name,  
     864                            file.directory_path, file.directory_id, escaped); 
     865        db_debug_rq(db_modify_file_data); 
     866        PGresult *res = PQexec(pq_conn, pq_request); 
     867 
     868        if( PQresultStatus(res) != PGRES_COMMAND_OK ) return NULL; 
     869         
     870        PQclear(res); 
     871 
    817872 
    818873        // Diff the files 
     874         
    819875        char *diff=malloc(XD3_ALLOCSIZE); 
    820876        int diff_len; 
     
    825881                          0); 
    826882 
    827         char pq_request[BUFFER_SIZE]; 
    828  
    829         // Insert the new file 
    830         sprintf(pq_request, "INSERT file " 
    831                             "(file_uid, file_id, revision_id, file_length, " 
    832                             "parent_file_id, stream_id, end_time, deleted_flag, " 
    833                             "file_name, directory_path, directory_id, data) " 
    834                             "VALUES " 
    835                             "\'%i\', \'%i\', \'%i\', \'%i\', \'%i\', \'%i\', \'NOW\', " 
    836                             "\'TRUE\', \'%s\', \'%s\', \'%s\'", 
    837                             file_uid, file_id, file.revision_id, data_len, 
    838                             parent_file_id, file.stream_id, file.file_name,  
    839                             file.directory_path, file.directory_id, data); 
    840         PQfreemem(PQexec(pq_conn, pq_request)); 
    841          
     883        escaped=PQescapeBytea(diff,diff_len,&escaped_len); 
     884 
     885 
    842886        // Insert the diff into the old file 
    843887        sprintf(pq_request, "UPDATE file " 
    844888                            "SET data = \'%s\' " 
    845889                            "WHERE file_uid = \'%i\'", 
    846                             diff, parent_file_id); 
    847         PQfreemem(PQexec(pq_conn, pq_request)); 
     890                            escaped, parent_file_id); 
     891        db_debug_rq(db_modify_file_data); 
     892        res = PQexec(pq_conn, pq_request); 
     893         
     894        if( PQresultStatus(res) != PGRES_COMMAND_OK ) return NULL; 
     895         
     896        PQclear(res); 
    848897 
    849898        return file.revision_id; 
     
    866915        int stream_id = PQgetvalue(res, 0,0); 
    867916 
    868         PQfreemem(res); 
     917        PQclear(res); 
    869918 
    870919        sprintf(pq_request,"SELECT * " 
     
    899948#include "stream.db" 
    900949         
    901         PQfreemem(res); 
     950        PQclear(res); 
    902951 
    903952        return stat; 
     
    919968        int stream_id = atoi(PQgetvalue(res, 0,0)); 
    920969 
    921         PQfreemem(res); 
     970        PQclear(res); 
    922971 
    923972        sprintf(pq_request,"SELECT * " 
     
    9521001#include "stream.db" 
    9531002         
    954         PQfreemem(res); 
     1003        PQclear(res); 
    9551004 
    9561005        return stat; 
  • vowfsc/db.h

    r51 r54  
    4141 * file_id as an integer. 
    4242 */ 
    43 int db_get_file_id( char *file_path ); 
     43int db_get_file_id( char *file_path ); // TESTED 
    4444 
    4545 
     
    4848 * file. 
    4949 */ 
    50 int db_get_file_max_revision( int file_id ); 
     50int db_get_file_max_revision( int file_id ); // TESTED 
    5151 
    5252 
     
    5555 * look at the file.db file. 
    5656 */ 
    57 file_t *db_get_file( int file_id ); 
     57file_t *db_get_file( int file_id ); // TESTED 
    5858file_t *db_get_file_rev( int file_id, int revision_id ); 
    5959 
     
    6262 * returns the data from the most current file. 
    6363 */ 
    64 char *db_get_file_data( int file_id ); 
    65 char *db_get_file_rev_data( int file_id, int revision_id ); 
     64char *db_get_file_data( int file_id ); // TESTED 
     65char *db_get_file_rev_data( int file_id, int revision_id ); // TESTED 
    6666 
    6767 
     
    8383 * new file. 
    8484 */ 
    85 int db_remove_file(int file_id); 
     85int db_remove_file(int file_id); // TESTED 
     86#define db_delete_file(file_id) db_remove_file(file_id) 
    8687 
    8788 
     
    9091 * revisions it.   
    9192 */ 
    92 int db_create_file(char *file_path, int stream_id ); 
     93int db_create_file(char *file_path, int stream_id ); // TESTED 
    9394 
    9495 
     
    109110 * file_id 
    110111 */ 
    111 int db_modify_file_data(int file_id, char *data, int data_len ); 
     112int db_modify_file_data(int file_id, char *data, int data_len ); // TESTED 
    112113 
    113114 
     
    149150file_t *db_get_dir_files( int dir_id, int *length ); 
    150151 
     152/* Does what it says, creates a new directory. 
     153 * Returns the dir_id of the new directory or null in 
     154 * the case of a failture. 
     155 */ 
     156int db_create_dir( char *dir_path ); // TODO 
     157 
    151158/* db_init and db_destoy create and destroy connections 
    152159 * to the database respectivly.  They are wrappers around 
     
    154161 * non-zero on failture. 
    155162 */ 
    156 int db_init(char *host, int port, char *dbname, char *username, char *password); 
    157 int db_destroy(); 
     163int db_init(char *host, int port, char *dbname, char *username, char *password); // TESTED 
     164int db_destroy(); // TESTED 
    158165 
     166/* Creates a new blank file system 
     167 */ 
     168int db_format_fs(); // TODO 
  • vowfsc/test.c

    r52 r54  
    2929        printf("The revision is: %i\n", file->revision_id ); 
    3030 
     31        char *string1=strdup("Most folks are about as happy as they make up their minds to be."); 
     32        char *string2=strdup("The secret of happiness is to make others believe they are the cause of it."); 
     33         
     34        int string1_len=strlen(string1)+1; //include '\0' 
     35        int string2_len=strlen(string2)+1; 
     36 
     37        db_modify_file_data(file_id, string1, string1_len); 
     38        db_modify_file_data(file_id, string2, string2_len); 
     39 
     40 
     41        char *data=db_get_file_data(file_id); 
     42        printf("data: %s\n",data); 
     43 
     44        char *old_data=db_get_file_rev_data(file_id, file->revision_id +1); 
     45        printf("old_data: %s\n",old_data); 
     46 
     47        db_remove_file(file_id); 
     48        data=db_get_file_data(file_id); 
     49        printf("data: %s\n",data); 
     50 
     51 
     52        free(string1); 
     53        free(data); 
     54        free(old_data); 
     55        free(string2); 
    3156        free(file); 
    3257        free(dir); 
  • vowfsc/xdelta.c

    r41 r54  
    1717        int diff_len; 
    1818 
    19         xd3_encode_memory(string1, string1_len, 
     19        xd3_encode_memory(string2, string2_len, 
    2020                          string1, string1_len, 
    2121                          diff, &diff_len, XD3_ALLOCSIZE, 
     
    2525        int output_len; 
    2626         
    27         printf("Diff( String1 -> String1 ): %s(%i)\n",diff,diff_len); 
     27        printf("Diff( String2 -> String1 ): %s(%i)\n",diff,diff_len); 
    2828         
    2929        xd3_decode_memory(diff, diff_len, 
     
    3232                          0); 
    3333         
    34         printf("Output( Diff -> String2): %s(%i)\n",output,output_len); 
     34        printf("Output( Diff -> String2 ): %s(%i)\n",output,output_len); 
     35 
     36        xd3_decode_memory(diff, diff_len, 
     37                          string1, string1_len, 
     38                          output, &output_len, XD3_ALLOCSIZE, 
     39                          0); 
     40         
     41        printf("Output( Diff -> String1 ): %s(%i)\n",output,output_len); 
     42 
    3543 
    3644