Rizin
unix-like reverse engineering framework and cli tools
zip_set_archive_comment.c File Reference
#include <stdlib.h>
#include "zipint.h"

Go to the source code of this file.

Functions

ZIP_EXTERN int zip_set_archive_comment (zip_t *za, const char *comment, zip_uint16_t len)
 

Function Documentation

◆ zip_set_archive_comment()

ZIP_EXTERN int zip_set_archive_comment ( zip_t za,
const char *  comment,
zip_uint16_t  len 
)

Definition at line 41 of file zip_set_archive_comment.c.

41  {
42  zip_string_t *cstr;
43 
44  if (ZIP_IS_RDONLY(za)) {
46  return -1;
47  }
48 
49  if (len > 0 && comment == NULL) {
51  return -1;
52  }
53 
54  if (len > 0) {
55  if ((cstr = _zip_string_new((const zip_uint8_t *)comment, len, ZIP_FL_ENC_GUESS, &za->error)) == NULL)
56  return -1;
57 
59  _zip_string_free(cstr);
61  return -1;
62  }
63  }
64  else
65  cstr = NULL;
66 
69 
70  if (((za->comment_orig && _zip_string_equal(za->comment_orig, cstr)) || (za->comment_orig == NULL && cstr == NULL))) {
71  _zip_string_free(cstr);
72  za->comment_changed = 0;
73  }
74  else {
75  za->comment_changes = cstr;
76  za->comment_changed = 1;
77  }
78 
79  return 0;
80 }
size_t len
Definition: 6502dis.c:15
#define NULL
Definition: cris-opc.c:27
ZIP_EXTERN void zip_error_set(zip_error_t *_Nullable, int, int)
Definition: zip_error.c:126
#define ZIP_FL_ENC_GUESS
Definition: zip.h:82
#define ZIP_ER_RDONLY
Definition: zip.h:130
#define ZIP_ER_INVAL
Definition: zip.h:123
zip_error_t error
Definition: zipint.h:281
zip_string_t * comment_changes
Definition: zipint.h:289
zip_string_t * comment_orig
Definition: zipint.h:288
bool comment_changed
Definition: zipint.h:290
zip_string_t * _zip_string_new(const zip_uint8_t *raw, zip_uint16_t length, zip_flags_t flags, zip_error_t *error)
Definition: zip_string.c:121
void _zip_string_free(zip_string_t *s)
Definition: zip_string.c:69
int _zip_string_equal(const zip_string_t *a, const zip_string_t *b)
Definition: zip_string.c:55
zip_encoding_type_t _zip_guess_encoding(zip_string_t *str, zip_encoding_type_t expected_encoding)
Definition: zip_utf-8.c:100
uint8_t zip_uint8_t
Definition: zipconf.h:33
#define ZIP_IS_RDONLY(za)
Definition: zipint.h:479
@ ZIP_ENCODING_UNKNOWN
Definition: zipint.h:254
@ ZIP_ENCODING_CP437
Definition: zipint.h:258
zip_t * za
Definition: ziptool.c:79

References _zip_guess_encoding(), _zip_string_equal(), _zip_string_free(), _zip_string_new(), zip::comment_changed, zip::comment_changes, zip::comment_orig, zip::error, len, NULL, za, ZIP_ENCODING_CP437, ZIP_ENCODING_UNKNOWN, ZIP_ER_INVAL, ZIP_ER_RDONLY, zip_error_set(), ZIP_FL_ENC_GUESS, and ZIP_IS_RDONLY.

Referenced by set_archive_comment().