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

Go to the source code of this file.

Functions

ZIP_EXTERN const char * zip_error_strerror (zip_error_t *err)
 

Function Documentation

◆ zip_error_strerror()

ZIP_EXTERN const char* zip_error_strerror ( zip_error_t err)

Definition at line 43 of file zip_error_strerror.c.

43  {
44  const char *zip_error_string, *system_error_string;
45  char buf[128], *s;
46 
48 
49  if (err->zip_err < 0 || err->zip_err >= _zip_err_str_count) {
50  snprintf(buf, sizeof(buf), "Unknown error %d", err->zip_err);
51  buf[sizeof(buf) - 1] = '\0'; /* make sure string is NUL-terminated */
52  zip_error_string = NULL;
53  system_error_string = buf;
54  }
55  else {
56  zip_error_string = _zip_err_str[err->zip_err].description;
57 
58  switch (_zip_err_str[err->zip_err].type) {
59  case ZIP_ET_SYS:
60  system_error_string = strerror(err->sys_err);
61  break;
62 
63  case ZIP_ET_ZLIB:
64  system_error_string = zError(err->sys_err);
65  break;
66 
67  case ZIP_ET_LIBZIP: {
69  int index = GET_INDEX_FROM_DETAIL(err->sys_err);
70 
71  if (error == 0) {
72  system_error_string = NULL;
73  }
74  else if (error >= _zip_err_details_count) {
75  snprintf(buf, sizeof(buf), "invalid detail error %u", error);
76  buf[sizeof(buf) - 1] = '\0'; /* make sure string is NUL-terminated */
77  system_error_string = buf;
78  }
80  snprintf(buf, sizeof(buf), "entry %d: %s", index, _zip_err_details[error].description);
81  buf[sizeof(buf) - 1] = '\0'; /* make sure string is NUL-terminated */
82  system_error_string = buf;
83  }
84  else {
85  system_error_string = _zip_err_details[error].description;
86  }
87  break;
88  }
89 
90  default:
91  system_error_string = NULL;
92  }
93  }
94 
95  if (system_error_string == NULL) {
96  return zip_error_string;
97  }
98  else {
99  if ((s = (char *)malloc(strlen(system_error_string) + (zip_error_string ? strlen(zip_error_string) + 2 : 0) + 1)) == NULL) {
101  }
102 
103  sprintf(s, "%s%s%s", (zip_error_string ? zip_error_string : ""), (zip_error_string ? ": " : ""), system_error_string);
104  err->str = s;
105 
106  return s;
107  }
108 }
static bool err
Definition: armass.c:435
#define NULL
Definition: cris-opc.c:27
voidpf void * buf
Definition: ioapi.h:138
snprintf
Definition: kernel.h:364
sprintf
Definition: kernel.h:365
#define ZIP_ER_MEMORY
Definition: zip.h:119
#define ZIP_ET_LIBZIP
Definition: zip.h:144
#define ZIP_ET_SYS
Definition: zip.h:142
ZIP_EXTERN void zip_error_fini(zip_error_t *_Nonnull)
Definition: zip_error.c:52
#define ZIP_ET_ZLIB
Definition: zip.h:143
void * malloc(size_t size)
Definition: malloc.c:123
int type
Definition: mipsasm.c:17
description
Definition: setup.py:259
static RzSocket * s
Definition: rtr.c:28
const char * description
Definition: zipint.h:197
void error(const char *msg)
Definition: untgz.c:593
const struct _zip_err_info _zip_err_details[]
Definition: zip_err_str.c:53
const struct _zip_err_info _zip_err_str[]
Definition: zip_err_str.c:15
const int _zip_err_details_count
Definition: zip_err_str.c:76
const int _zip_err_str_count
Definition: zip_err_str.c:51
uint8_t zip_uint8_t
Definition: zipconf.h:33
#define GET_INDEX_FROM_DETAIL(error)
Definition: zipint.h:208
#define MAX_DETAIL_INDEX
Definition: zipint.h:206
#define ZIP_DETAIL_ET_ENTRY
Definition: zipint.h:193
#define GET_ERROR_FROM_DETAIL(error)
Definition: zipint.h:209
const char *ZEXPORT zError(int err)
Definition: zutil.c:133

References _zip_err_details, _zip_err_details_count, _zip_err_str, _zip_err_str_count, setup::description, _zip_err_info::description, err, error(), GET_ERROR_FROM_DETAIL, GET_INDEX_FROM_DETAIL, malloc(), MAX_DETAIL_INDEX, NULL, s, snprintf, sprintf, type, _zip_err_info::type, zError(), ZIP_DETAIL_ET_ENTRY, ZIP_ER_MEMORY, zip_error_fini(), ZIP_ET_LIBZIP, ZIP_ET_SYS, and ZIP_ET_ZLIB.

Referenced by add_from_zip(), cat(), copy_source(), do_read(), list_zip(), main(), merge_zip(), open_compressed(), open_file(), windows_open(), write_memory_src_to_file(), zip_file_strerror(), and zip_strerror().