Есть такой код (строки с проверками на ошибки опущены):
const char *old_cwd = getcwd(NULL, 0);
zip = zip_open(zb->result_path, ZIP_CREATE, &err);
chdir(zb->source_dir_path);
for (i = 0; i < fdlist.count; ++i) {
zip_src = zip_source_file(zip, fdlist.list[i]->old_name, 0, -1);
zip_add(zip, fdlist.list[i]->new_name, zip_src);
}
chdir(old_cwd);
zip_close(zip);
Я делаю chdir, так как мне нужно добавить файлы в массив из директории zb->source_dir_path, а в fdlist.list[] хранятся относительные пути для этой директории.
Но этот код не работает. Зип файл нигде не создается. Перемена мест двух последних строк
zip_close(zip);
chdir(old_cwd);
Я сделал такой хак:
const char *old_cwd = getcwd(NULL, 0);
zip = zip_open(zb->result_path, ZIP_CREATE, &err);
chdir(zb->source_dir_path);
for (i = 0; i < fdlist.count; ++i) {
zip_src = zip_source_file(zip, fdlist.list[i]->old_name, 0, -1);
zip_add(zip, fdlist.list[i]->new_name, zip_src);
}
zip_close(zip);
/* If zippath is not absolutely then move it to old cwd. */
if (zb->result_path[0] != '/') {
char cmdbuf[128] = {0};
strcpy(cmdbuf, "mv ");
strcat(cmdbuf, zb->result_path);
strcat(cmdbuf, " ");
strcat(cmdbuf, old_cwd);
system(cmdbuf);
}
chdir(old_cwd);
Но что не так с первым кодом?