int main(int argc, char *argv[]) { const char *archive; struct zip *za; char buf[100]; int err; int i; prg = argv[0]; if (argc != 2) { fprintf(stderr, "usage: %s archive\n", prg); return 1; } archive = argv[1]; if ((za=zip_open(archive, 0, &err)) == NULL) { zip_error_to_str(buf, sizeof(buf), err, errno); fprintf(stderr, "%s: can't open zip archive `%s': %s\n", prg, archive, buf); return 1; } for (i=0; i<zip_get_num_files(za); i++) { snprintf(buf, sizeof(buf), "File comment no %d", i); if (zip_set_file_comment(za, i, buf, strlen(buf)) < 0) { zip_error_to_str(buf, sizeof(buf), err, errno); fprintf(stderr, "%s: zip_set_file_comment on file %d failed: %s\n", prg, i, buf); } } /* remove comment for third file */ if (zip_set_file_comment(za, 2, NULL, 0) < 0) { zip_error_to_str(buf, sizeof(buf), err, errno); fprintf(stderr, "%s: zip_set_file_comment on file %d failed: %s\n", prg, i, buf); } if (zip_close(za) == -1) { fprintf(stderr, "%s: can't close zip archive `%s'\n", prg, archive); return 1; } return 0; }
static int S_archive_set_file_comment(lua_State* L) { struct zip** ar = check_archive(L, 1); int path_idx = luaL_checkint(L, 2)-1; size_t comment_len = 0; const char* comment = lua_isnil(L, 3) ? NULL : luaL_checklstring(L, 3, &comment_len); if ( ! *ar ) return 0; if ( 0 != zip_set_file_comment(*ar, path_idx, comment, comment_len) ) { lua_pushstring(L, zip_strerror(*ar)); lua_error(L); } return 0; }
static VALUE zipruby_archive_set_fcomment(VALUE self, VALUE index, VALUE comment) { struct zipruby_archive *p_archive; char *s_comment = NULL; int len = 0; if (!NIL_P(comment)) { Check_Type(comment, T_STRING); s_comment = RSTRING_PTR(comment); len = RSTRING_LEN(comment); } Data_Get_Struct(self, struct zipruby_archive, p_archive); Check_Archive(p_archive); if (zip_set_file_comment(p_archive->archive, NUM2INT(index), s_comment, len) == -1) { zip_unchange_all(p_archive->archive); zip_unchange_archive(p_archive->archive); rb_raise(Error, "Comment file failed at %d: %s", NUM2INT(index), zip_strerror(p_archive->archive)); } return Qnil; }