file.patch 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. Index: src/apprentice.c
  2. --- src/apprentice.c.orig 2008-07-26 17:03:55 +0200
  3. +++ src/apprentice.c 2008-08-30 22:53:20 +0200
  4. @@ -697,6 +697,7 @@
  5. file_oomem(ms, maxmagic * sizeof(*marray));
  6. return -1;
  7. }
  8. + memset(marray, 0, maxmagic * sizeof(*marray));
  9. marraycount = 0;
  10. /* print silly verbose header for USG compat. */
  11. Index: src/compress.c
  12. --- src/compress.c.orig 2008-07-26 17:03:55 +0200
  13. +++ src/compress.c 2008-08-30 22:53:20 +0200
  14. @@ -167,7 +167,7 @@
  15. * `safe' read for sockets and pipes.
  16. */
  17. protected ssize_t
  18. -sread(int fd, void *buf, size_t n, int canbepipe)
  19. +file_sread(int fd, void *buf, size_t n, int canbepipe)
  20. {
  21. int rv, cnt;
  22. #ifdef FIONREAD
  23. @@ -261,7 +261,7 @@
  24. if (swrite(tfd, startbuf, nbytes) != (ssize_t)nbytes)
  25. r = 1;
  26. else {
  27. - while ((r = sread(fd, buf, sizeof(buf), 1)) > 0)
  28. + while ((r = file_sread(fd, buf, sizeof(buf), 1)) > 0)
  29. if (swrite(tfd, buf, (size_t)r) != r)
  30. break;
  31. }
  32. @@ -463,7 +463,7 @@
  33. n = 0;
  34. goto err;
  35. }
  36. - if ((r = sread(fdout[0], *newch, HOWMANY, 0)) <= 0) {
  37. + if ((r = file_sread(fdout[0], *newch, HOWMANY, 0)) <= 0) {
  38. #ifdef DEBUG
  39. (void)fprintf(stderr, "Read failed (%s)\n",
  40. strerror(errno));
  41. Index: src/file.h
  42. --- src/file.h.orig 2008-07-26 17:03:55 +0200
  43. +++ src/file.h 2008-08-30 22:53:20 +0200
  44. @@ -370,7 +370,7 @@
  45. protected void file_showstr(FILE *, const char *, size_t);
  46. protected size_t file_mbswidth(const char *);
  47. protected const char *file_getbuffer(struct magic_set *);
  48. -protected ssize_t sread(int, void *, size_t, int);
  49. +protected ssize_t file_sread(int, void *, size_t, int);
  50. protected int file_check_mem(struct magic_set *, unsigned int);
  51. protected int file_looks_utf8(const unsigned char *, size_t, unichar *, size_t *);
  52. @@ -391,9 +391,11 @@
  53. #endif
  54. #ifndef HAVE_VASPRINTF
  55. +#define vasprintf file_vasprintf
  56. int vasprintf(char **, const char *, va_list);
  57. #endif
  58. #ifndef HAVE_ASPRINTF
  59. +#define asprintf file_asprintf
  60. int asprintf(char **ptr, const char *format_string, ...);
  61. #endif
  62. Index: src/funcs.c
  63. --- src/funcs.c.orig 2008-07-26 17:03:55 +0200
  64. +++ src/funcs.c 2008-08-30 22:53:20 +0200
  65. @@ -29,6 +29,7 @@
  66. #include <stdarg.h>
  67. #include <stdlib.h>
  68. #include <string.h>
  69. +#include <limits.h>
  70. #include <ctype.h>
  71. #if defined(HAVE_WCHAR_H)
  72. #include <wchar.h>
  73. @@ -346,3 +347,108 @@
  74. #endif /* ENABLE_CONDITIONALS */
  75. return 0;
  76. }
  77. +
  78. +/*
  79. + * From bsd-asprintf.c in OpenSSH:
  80. + * Copyright (c) 2004 Darren Tucker.
  81. + *
  82. + * Based originally on asprintf.c from OpenBSD:
  83. + * Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com>
  84. + *
  85. + * Permission to use, copy, modify, and distribute this software for any
  86. + * purpose with or without fee is hereby granted, provided that the above
  87. + * copyright notice and this permission notice appear in all copies.
  88. + *
  89. + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  90. + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  91. + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  92. + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  93. + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  94. + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  95. + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  96. + */
  97. +
  98. +#ifndef HAVE_ASPRINTF
  99. +int asprintf(char **str, const char *fmt, ...)
  100. +{
  101. + va_list ap;
  102. + int ret;
  103. +
  104. + *str = NULL;
  105. + va_start(ap, fmt);
  106. + ret = vasprintf(str, fmt, ap);
  107. + va_end(ap);
  108. +
  109. + return ret;
  110. +}
  111. +#endif
  112. +
  113. +#ifndef HAVE_VASPRINTF
  114. +
  115. +#ifdef HAVE_LIMITS_H
  116. +#include <limits.h>
  117. +#endif
  118. +
  119. +#include <errno.h>
  120. +#include <stdarg.h>
  121. +#include <stdlib.h>
  122. +
  123. +#ifndef VA_COPY
  124. +# ifdef HAVE_VA_COPY
  125. +# define VA_COPY(dest, src) va_copy(dest, src)
  126. +# else
  127. +# ifdef HAVE___VA_COPY
  128. +# define VA_COPY(dest, src) __va_copy(dest, src)
  129. +# else
  130. +# define VA_COPY(dest, src) (dest) = (src)
  131. +# endif
  132. +# endif
  133. +#endif
  134. +
  135. +#define INIT_SZ 128
  136. +
  137. +int vasprintf(char **str, const char *fmt, va_list ap)
  138. +{
  139. + int ret = -1;
  140. + va_list ap2;
  141. + char *string, *newstr;
  142. + size_t len;
  143. +
  144. + VA_COPY(ap2, ap);
  145. + if ((string = malloc(INIT_SZ)) == NULL)
  146. + goto fail;
  147. +
  148. + ret = vsnprintf(string, INIT_SZ, fmt, ap2);
  149. + if (ret >= 0 && ret < INIT_SZ) { /* succeeded with initial alloc */
  150. + *str = string;
  151. + } else if (ret == INT_MAX || ret < 0) { /* Bad length */
  152. + free(string);
  153. + goto fail;
  154. + } else { /* bigger than initial, realloc allowing for nul */
  155. + len = (size_t)ret + 1;
  156. + if ((newstr = realloc(string, len)) == NULL) {
  157. + free(string);
  158. + goto fail;
  159. + } else {
  160. + va_end(ap2);
  161. + VA_COPY(ap2, ap);
  162. + ret = vsnprintf(newstr, len, fmt, ap2);
  163. + if (ret >= 0 && (size_t)ret < len) {
  164. + *str = newstr;
  165. + } else { /* failed with realloc'ed string, give up */
  166. + free(newstr);
  167. + goto fail;
  168. + }
  169. + }
  170. + }
  171. + va_end(ap2);
  172. + return (ret);
  173. +
  174. +fail:
  175. + *str = NULL;
  176. + errno = ENOMEM;
  177. + va_end(ap2);
  178. + return (-1);
  179. +}
  180. +#endif
  181. +
  182. Index: src/getopt_long.h
  183. --- /dev/null 2008-08-30 22:55:00 +0200
  184. +++ src/getopt_long.h 2008-08-30 22:53:20 +0200
  185. @@ -0,0 +1,14 @@
  186. +#ifndef __GETOPT_LONG_H
  187. +#define __GETOPT_LONG_H 1
  188. +struct option {
  189. + const char *name;
  190. + int has_arg;
  191. + int *flag;
  192. + int val;
  193. +};
  194. +#define no_argument 0
  195. +#define required_argument 1
  196. +#define optional_argument 2
  197. +int getopt_long(int argc, char * const *argv, const char *optstring, const struct option *longopts, int *longindex);
  198. +
  199. +#endif
  200. Index: src/magic.c
  201. --- src/magic.c.orig 2008-07-26 17:03:55 +0200
  202. +++ src/magic.c 2008-08-30 22:53:20 +0200
  203. @@ -334,7 +334,7 @@
  204. if (ispipe) {
  205. ssize_t r = 0;
  206. - while ((r = sread(fd, (void *)&buf[nbytes],
  207. + while ((r = file_sread(fd, (void *)&buf[nbytes],
  208. (size_t)(HOWMANY - nbytes), 1)) > 0) {
  209. nbytes += r;
  210. if (r < PIPE_BUF) break;
  211. Index: src/softmagic.c
  212. --- src/softmagic.c.orig 2008-07-28 19:25:21 +0200
  213. +++ src/softmagic.c 2008-08-30 22:53:20 +0200
  214. @@ -302,10 +302,9 @@
  215. }
  216. #ifndef HAVE_STRNDUP
  217. -char * strndup(const char *, size_t);
  218. -
  219. -char *
  220. -strndup(const char *str, size_t n)
  221. +#define strndup(str,n) magic_strndup(str,n)
  222. +static char *
  223. +magic_strndup(const char *str, size_t n)
  224. {
  225. size_t len;
  226. char *copy;