--- ext/crcio.c 2006-09-17 12:38:22.000000000 -0400 +++ ext/crcio.c 2015-03-23 10:29:59.000000000 -0400 @@ -34,9 +34,11 @@ /* ------------------------------------------------------------------------ */ unsigned int -calccrc(crc, p, n) +calccrc(crc, _p, n) unsigned int crc; - unsigned char *p; + const void *_p; unsigned int n; { + const unsigned char *p = _p; + while (n-- > 0) crc = UPDATE_CRC(crc, *p++); @@ -68,5 +70,5 @@ fwrite_crc(crcp, p, n, fp) unsigned int *crcp; - unsigned char *p; + const unsigned char *p; int n; FILE *fp; @@ -139,9 +141,11 @@ /* ------------------------------------------------------------------------ */ int -fwrite_txt(p, n, fp) - unsigned char *p; +fwrite_txt(_p, n, fp) + const void *_p; int n; FILE *fp; { + const unsigned char *p = _p; + while (--n >= 0) { if (*p != '\015' && *p != '\032') { @@ -161,6 +165,6 @@ /* ------------------------------------------------------------------------ */ int -fread_txt(p, n, fp) - unsigned char *p; +fread_txt(_p, n, fp) + void *_p; int n; FILE *fp; @@ -168,4 +172,5 @@ int c; int cnt = 0; + unsigned char *p = _p; while (cnt < n) { --- ext/extract.c 2006-09-17 13:45:51.000000000 -0400 +++ ext/extract.c 2015-03-23 10:42:48.000000000 -0400 @@ -15,5 +15,5 @@ size_t original_size; size_t packed_size; - char *name; + const char *name; int method; size_t *read_sizep; --- ext/header.c 2006-09-17 12:38:22.000000000 -0400 +++ ext/header.c 2015-03-23 10:54:36.000000000 -0400 @@ -49,10 +49,11 @@ #endif -int -calc_sum(p, len) - char *p; +static int +calc_sum(_p, len) + const void *_p; int len; { int sum = 0; + const char *p = _p; while (len--) sum += *p++; @@ -68,5 +69,5 @@ if (verbose_listing && verbose > 1) - printf("%02d %2d: ", get_ptr - start_ptr, 1); + printf("%02td %2d: ", get_ptr - start_ptr, 1); c = GET_BYTE(); if (verbose_listing && verbose > 1) { @@ -85,5 +86,5 @@ if (len == 0) return; if (verbose_listing && verbose > 1) { - printf("%02d %2d: ", get_ptr - start_ptr, len); + printf("%02td %2d: ", get_ptr - start_ptr, len); while (len--) printf("0x%02x ", GET_BYTE()); @@ -103,5 +104,5 @@ #if DUMP_HEADER if (verbose_listing && verbose > 1) - printf("%02d %2d: ", get_ptr - start_ptr, 2); + printf("%02td %2d: ", get_ptr - start_ptr, 2); #endif b0 = GET_BYTE(); @@ -131,5 +132,5 @@ #if DUMP_HEADER if (verbose_listing && verbose > 1) - printf("%02d %2d: ", get_ptr - start_ptr, 4); + printf("%02td %2d: ", get_ptr - start_ptr, 4); #endif b0 = GET_BYTE(); @@ -164,5 +165,5 @@ #if DUMP_HEADER if (verbose_listing && verbose > 1) - printf("%02d %2d: \"", get_ptr - start_ptr, len); + printf("%02td %2d: \"", get_ptr - start_ptr, len); for (i = 0; i < len; i++) { @@ -1172,9 +1173,9 @@ /* remove leading `xxxx/..' */ -static char * -remove_leading_dots(char *path) +static const char * +remove_leading_dots(const char *path) { - char *first = path; - char *ptr = 0; + const char *first = path; + const char *ptr = NULL; if (strcmp(first, "..") == 0) { @@ -1201,5 +1202,5 @@ if (ptr) { - warning("Removing leading `%.*s' from member name.", ptr-first, first); + warning("Removing leading `%.*s' from member name.", (int)(ptr - first), first); return ptr; } --- ext/huf.c 2006-09-17 12:38:22.000000000 -0400 +++ ext/huf.c 2015-03-23 10:37:51.000000000 -0400 @@ -235,7 +235,5 @@ /* lh4, 5, 6, 7 */ void -output_st1(c, p) - unsigned short c; - unsigned short p; +output_st1(unsigned short c, unsigned short p) { static unsigned short cpos; --- ext/lha.h 2006-09-18 04:53:29.000000000 -0400 +++ ext/lha.h 2015-03-23 11:03:01.000000000 -0400 @@ -212,4 +212,6 @@ #include "lha_macro.h" +unsigned char *alloc_buf(void); + #define exit(n) lha_exit(n) @@ -301,32 +303,34 @@ LHALIB_EXTERN boolean need_file(const char*); LHALIB_EXTERN boolean archive_is_msdos_sfx1(const char*); -LHALIB_EXTERN void output_dyn(); -LHALIB_EXTERN void encode_start_fix(); -LHALIB_EXTERN void encode_end_dyn(); -LHALIB_EXTERN void output_st1(); -LHALIB_EXTERN void encode_start_st0(); -LHALIB_EXTERN void encode_end_st0(); -LHALIB_EXTERN void encode_start_st1(); -LHALIB_EXTERN void encode_end_st1(); -LHALIB_EXTERN unsigned short decode_c_dyn(); -LHALIB_EXTERN unsigned short decode_p_dyn(); -LHALIB_EXTERN void decode_start_fix(); -LHALIB_EXTERN void decode_start_dyn(); -LHALIB_EXTERN void decode_start_st0(); -LHALIB_EXTERN void decode_start_st1(); -LHALIB_EXTERN unsigned short decode_c_st0(); -LHALIB_EXTERN unsigned short decode_c_st1(); -LHALIB_EXTERN unsigned short decode_p_st0(); -LHALIB_EXTERN unsigned short decode_p_st1(); -LHALIB_EXTERN unsigned short decode_c_lzs(); -LHALIB_EXTERN unsigned short decode_p_lzs(); -LHALIB_EXTERN void decode_start_lzs(); -LHALIB_EXTERN unsigned short decode_c_lz5(); -LHALIB_EXTERN unsigned short decode_p_lz5(); -LHALIB_EXTERN void decode_start_lz5(); -LHALIB_EXTERN void make_crctable(); +LHALIB_EXTERN void output_dyn(unsigned int code, unsigned int pos); +LHALIB_EXTERN void encode_start_fix(void); +LHALIB_EXTERN void encode_end_dyn(void); +LHALIB_EXTERN void output_st1(unsigned short c, unsigned short p); +LHALIB_EXTERN void encode_start_st0(void); +LHALIB_EXTERN void encode_end_st0(void); +LHALIB_EXTERN void encode_start_st1(void); +LHALIB_EXTERN void encode_end_st1(void); +LHALIB_EXTERN void start_c_dyn(void); +LHALIB_EXTERN unsigned short decode_c_dyn(void); +LHALIB_EXTERN unsigned short decode_p_dyn(void); +LHALIB_EXTERN void decode_start_fix(void); +LHALIB_EXTERN void decode_start_dyn(void); +LHALIB_EXTERN void decode_start_st0(void); +LHALIB_EXTERN void decode_start_st1(void); +LHALIB_EXTERN unsigned short decode_c_st0(void); +LHALIB_EXTERN unsigned short decode_c_st1(void); +LHALIB_EXTERN unsigned short decode_p_st0(void); +LHALIB_EXTERN unsigned short decode_p_st1(void); +LHALIB_EXTERN unsigned short decode_c_lzs(void); +LHALIB_EXTERN unsigned short decode_p_lzs(void); +LHALIB_EXTERN void decode_start_lzs(void); +LHALIB_EXTERN unsigned short decode_c_lz5(void); +LHALIB_EXTERN unsigned short decode_p_lz5(void); +LHALIB_EXTERN void decode_start_lz5(void); +LHALIB_EXTERN void make_crctable(void); LHALIB_EXTERN size_t copyfile(FILE* f1, FILE* f2, size_t size, int text_flg, unsigned int* crcp); -LHALIB_EXTERN void init_getbits(); -LHALIB_EXTERN void init_code_cache(); +LHALIB_EXTERN void init_getbits(void); +LHALIB_EXTERN void init_putbits(void); +LHALIB_EXTERN void init_code_cache(void); LHALIB_EXTERN void putcode(unsigned char n, unsigned short x); LHALIB_EXTERN void putbits(unsigned char n, unsigned short x); @@ -335,5 +339,18 @@ LHALIB_EXTERN void encode_p_st0(unsigned short j); - +NORETURN(void lha_exit(int n)); +unsigned int calccrc(unsigned int crc, const void *p, unsigned int length); +int fread_txt(void *p, int n, FILE *fp); +int fwrite_txt(const void *p, int n, FILE *fp); +int fread_crc(unsigned int *crcp, unsigned char *p, int n, FILE *fp); +void fwrite_crc(unsigned int *crcp, const unsigned char *p, int n, FILE *fp); +void make_table(short nchar, const unsigned char bitlenp[], short tablebits, unsigned short table[]); +unsigned int decode(struct interfacing *intf); +short make_tree(int nchar, unsigned short *freqp, unsigned char *bitlenp, unsigned short *codep); +int str_safe_copy(char *dst, const char *src, int dstsz); +int decode_lzhuf(FILE *in, FILE *out, size_t original, size_t packed, const char *name, int method, size_t *readp); +int seek_lha_header(FILE *fp); +boolean get_header(FILE *fp, LzHeader *hdr); +PRINTF_ARGS(int xsnprintf(char *dst, size_t size, const char *fmt, ...), 3, 4); #define start_indicator(name, size, ing, len) 0 --- ext/lhalib.c 2006-09-18 05:11:35.000000000 -0400 +++ ext/lhalib.c 2015-03-23 11:00:35.000000000 -0400 @@ -19,5 +19,5 @@ #include "lha.h" -#include "st.h" +#include static VALUE lhalib; @@ -76,5 +76,5 @@ proc = Qnil; rb_scan_args(argc, argv, "1&", &file, &proc); - rb_check_safe_str(file); + SafeStringValue(file); rb_secure(4); --- ext/lharc.c 2006-09-17 12:38:22.000000000 -0400 +++ ext/lharc.c 2015-03-23 10:58:33.000000000 -0400 @@ -53,5 +53,5 @@ static boolean open_old_archive_1(name, v_fp) - char *name; + const char *name; FILE **v_fp; { --- ext/lhext.c 2006-09-17 12:38:22.000000000 -0400 +++ ext/lhext.c 2015-03-23 10:41:48.000000000 -0400 @@ -27,6 +27,7 @@ }; -static void add_dirinfo(char* name, LzHeader* hdr); -static void adjust_dirinfo(); +static void add_dirinfo(const char* name, LzHeader* hdr); +static void adjust_dirinfo(void); +static int is_directory_traversal(const char *path); /* ------------------------------------------------------------------------ */ @@ -396,6 +397,6 @@ } -int -is_directory_traversal(char *path) +static int +is_directory_traversal(const char *path) { int state = 0; @@ -437,5 +438,5 @@ static LzHeaderList *dirinfo; -static void add_dirinfo(char *name, LzHeader *hdr) +static void add_dirinfo(const char *name, LzHeader *hdr) { LzHeaderList *p; --- ext/maketbl.c 2006-09-17 12:38:22.000000000 -0400 +++ ext/maketbl.c 2015-03-23 10:32:06.000000000 -0400 @@ -10,9 +10,6 @@ void -make_table(nchar, bitlen, tablebits, table) - short nchar; - unsigned char bitlen[]; - short tablebits; - unsigned short table[]; +make_table(short nchar, const unsigned char bitlen[], short tablebits, + unsigned short table[]) { unsigned short count[17]; /* count of bitlen */ --- ext/maketree.c 2006-09-17 13:36:33.000000000 -0400 +++ ext/maketree.c 2015-03-23 11:02:50.000000000 -0400 @@ -96,5 +96,5 @@ short *heap; size_t heapsize; - unsigned short *freq; + const unsigned short *freq; { short j, k; --- ext/util.c 2006-09-18 04:53:29.000000000 -0400 +++ ext/util.c 2015-03-23 10:57:53.000000000 -0400 @@ -115,8 +115,9 @@ int #if STDC_HEADERS -xsnprintf(char *dest, size_t size, char *fmt, ...) +xsnprintf(char *dest, size_t size, const char *fmt, ...) #else xsnprintf(dest, size, fmt, va_alist) - char *dest, *fmt; + char *dest; + const char *fmt; size_t size; va_dcl