Josh - 2008-06-12

I'm getting a segfault using libarchive when trying running an example from archive_write_new manpage.I step through the app and get the following stack when after the call to archive_write_header. I thought maybe the it was having issues with the file not existing but i opened the file before the archive_write_heaer call and it was there where not issues with that.

Stack

Thread [1] (Suspended: Signal 'SIGSEGV' received. Description: Segmentation fault.)
3 wcsxfrm() 0x77c483b7
2 stricmp() 0x77c4627d
1 libarchive2!archive_write_open() 0x62594d4b
Code

int main () {

struct myArchData *mydata = malloc(sizeof(struct myArchData));
struct archive *a;
struct archive_entry *entry;
struct stat st;

char buff[8192];
int len;
int fd;

a = archive_write_new();
mydata->name = "C:\\test.tar";
  archive_write_set_compression_gzip(a);
  archive_write_set_format_ustar(a);
  archive_write_open(a, mydata, myopen, mywrite, myclose);

  char **filename = (char**)malloc(1* sizeof(*filename));
  filename[0] = "C:\\powerdvd.log";
  int fileHanlde = open(*filename, O_RDONLY);
  close(fileHanlde);
  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);
    len = read(fd, buff, sizeof(buff));
    while ( len > 0 ) {
    archive_write_data(a, buff, len);
    len = read(fd, buff, sizeof(buff));
    }
    archive_entry_free(entry);
    filename = filename + 1;
  }
  archive_write_finish(a);

return 0;

}

compile and link commands
g++ -O0 -g3 -Wall -c -fmessage-length=0 -otransfer\fileDownload.o ..\transfer\fileDownload.cpp
g++ -LC:\Program Files\GnuWin32\lib -LC:\lang_env\c\lib -oAutoloader.exe transfer\fileDownload.o main.o -llibarchive

if anyone has suggestions let me know