Libarchive - Probleme beim Erzeugen von Archiven



  • Hallo Zusammen,

    ich versuche hier gerade ein Archiv mit Hilfe der Bibliothek libarchive zu erzeugen. Jedoch habe ich das Problem, dass mein Programm zwar brav alle Verzeichnisse packt, alle sonstigen Dateien (im vorliegenden Fall Textdateien) jedoch unberührt lässt.
    Ich bin schonmal so weit, dass ich weiß, dass

    archive_write_data(a, buff, len );
    

    den Buffer nicht zu schreiben scheint (Rückgabewert = 0 ). Der Grund dafür ist mir jedoch nicht klar. Meine Suche (google, Projektseite, etc.) war leider Erfolglos und auch in den Man-Pages bin ich leider nicht fündig geworden.
    Hier nochmal der Code:

    #include <stdlib.h>
    
    #include <sys/stat.h>
    #include <fcntl.h>
    
    #include <string.h>
    
    #include <archive.h>
    #include <archive_entry.h>
    
    static void tar_create(const char *outname, const char **filename)
    {
        struct archive* a;
        struct archive_entry* entry;
        struct stat st;
        char buff[8192];
        int fd(0);
        int len(0);
    
        a = archive_write_new();
    
        archive_write_set_compression_gzip( a );
        archive_write_set_format_ustar( a );
        archive_write_set_bytes_per_block( a, 4096 );
        archive_write_open_filename( a, outname );
    
        while( *filename ) {
            stat( *filename, &st );
            entry = archive_entry_new();
            archive_entry_copy_stat(entry, &st );
            archive_entry_set_pathname( entry, *filename );
            archive_write_header( a, entry );
            fd = open( *filename, O_RDONLY );
            if( fd != -1 ) {
                len = read( fd, buff, sizeof( buff ));
                while( len > 0 ) {
                    //check ist nach Ausführung 0, buff enthält die richtigen Daten, len die korrekte länge
                    size_t check = archive_write_data( a, buff, len );
                    len = read(fd, buff, sizeof(buff));
                }
                close(fd);
            }
            archive_entry_free(entry);
            ++filename;
        }
        archive_write_close(a);
        archive_write_finish(a);
    }
    

    Ich bin im Moment wirklich ratlos. Für jeden Hinweis wäre ich sehr dankbar.

    Gruß,
    mt


Anmelden zum Antworten