version 1.1.1.1, 2012/02/21 23:48:05
|
version 1.1.1.2, 2013/07/22 01:32:11
|
Line 40
|
Line 40
|
ZIP_EXTERN(int) |
ZIP_EXTERN(int) |
zip_set_archive_flag(struct zip *za, int flag, int value) |
zip_set_archive_flag(struct zip *za, int flag, int value) |
{ |
{ |
|
unsigned int new_flags; |
|
|
if (value) |
if (value) |
za->ch_flags |= flag; | new_flags = za->ch_flags | flag; |
else |
else |
za->ch_flags &= ~flag; | new_flags = za->ch_flags & ~flag; |
| |
| if (new_flags == za->ch_flags) |
| return 0; |
| |
| if (ZIP_IS_RDONLY(za)) { |
| _zip_error_set(&za->error, ZIP_ER_RDONLY, 0); |
| return -1; |
| } |
| |
| if ((flag & ZIP_AFL_RDONLY) && value |
| && (za->ch_flags & ZIP_AFL_RDONLY) == 0) { |
| if (_zip_changed(za, NULL)) { |
| _zip_error_set(&za->error, ZIP_ER_CHANGED, 0); |
| return -1; |
| } |
| } |
| |
| za->ch_flags = new_flags; |
|
|
return 0; |
return 0; |
} |
} |