cherry-pick.FILE5_35-59-g8305d1cc.use-c-casts-everywhere.patch 66 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247
  1. Subject: Use c++ casts everywhere
  2. Origin: FILE5_35-59-g8305d1cc <https://github.com/file/file/commit/FILE5_35-59-g8305d1cc>
  3. Upstream-Author: Christos Zoulas <christos@zoulas.com>
  4. Date: Wed Feb 20 02:35:27 2019 +0000
  5. --- a/src/apprentice.c
  6. +++ b/src/apprentice.c
  7. @@ -56,10 +56,10 @@
  8. #endif
  9. -#define EATAB {while (isascii((unsigned char) *l) && \
  10. - isspace((unsigned char) *l)) ++l;}
  11. -#define LOWCASE(l) (isupper((unsigned char) (l)) ? \
  12. - tolower((unsigned char) (l)) : (l))
  13. +#define EATAB {while (isascii(CAST(unsigned char, *l)) && \
  14. + isspace(CAST(unsigned char, *l))) ++l;}
  15. +#define LOWCASE(l) (isupper(CAST(unsigned char, l)) ? \
  16. + tolower(CAST(unsigned char, l)) : (l))
  17. /*
  18. * Work around a bug in headers on Digital Unix.
  19. * At least confirmed for: OSF1 V4.0 878
  20. @@ -78,8 +78,8 @@
  21. #define MAP_FILE 0
  22. #endif
  23. -#define ALLOC_CHUNK (size_t)10
  24. -#define ALLOC_INCR (size_t)200
  25. +#define ALLOC_CHUNK CAST(size_t, 10)
  26. +#define ALLOC_INCR CAST(size_t, 200)
  27. #define MAP_TYPE_USER 0
  28. #define MAP_TYPE_MALLOC 1
  29. @@ -309,7 +309,7 @@
  30. {
  31. int type;
  32. - if (isalpha((unsigned char)l[1])) {
  33. + if (isalpha(CAST(unsigned char, l[1]))) {
  34. switch (l[1]) {
  35. case 'C':
  36. /* "dC" and "uC" */
  37. @@ -344,7 +344,7 @@
  38. return FILE_INVALID;
  39. }
  40. l += 2;
  41. - } else if (isdigit((unsigned char)l[1])) {
  42. + } else if (isdigit(CAST(unsigned char, l[1]))) {
  43. /*
  44. * "d{num}" and "u{num}"; we only support {num} values
  45. * of 1, 2, 4, and 8 - the Single UNIX Specification
  46. @@ -355,7 +355,7 @@
  47. * neither of them support values bigger than 8 or
  48. * non-power-of-2 values.
  49. */
  50. - if (isdigit((unsigned char)l[2])) {
  51. + if (isdigit(CAST(unsigned char, l[2]))) {
  52. /* Multi-digit, so > 9 */
  53. return FILE_INVALID;
  54. }
  55. @@ -441,8 +441,8 @@
  56. if (magicsize != FILE_MAGICSIZE) {
  57. file_error(ms, 0, "magic element size %lu != %lu",
  58. - (unsigned long)sizeof(*map->magic[0]),
  59. - (unsigned long)FILE_MAGICSIZE);
  60. + CAST(unsigned long, sizeof(*map->magic[0])),
  61. + CAST(unsigned long, FILE_MAGICSIZE));
  62. return -1;
  63. }
  64. @@ -455,7 +455,7 @@
  65. #ifndef COMPILE_ONLY
  66. map = apprentice_map(ms, fn);
  67. - if (map == (struct magic_map *)-1)
  68. + if (map == RCAST(struct magic_map *, -1))
  69. return -1;
  70. if (map == NULL) {
  71. if (ms->flags & MAGIC_CHECK)
  72. @@ -507,7 +507,7 @@
  73. struct magic_set *ms;
  74. size_t i, len;
  75. - if ((ms = CAST(struct magic_set *, calloc((size_t)1,
  76. + if ((ms = CAST(struct magic_set *, calloc(CAST(size_t, 1u),
  77. sizeof(struct magic_set)))) == NULL)
  78. return NULL;
  79. @@ -1585,7 +1585,7 @@
  80. for (p = cond_tbl; p->len; p++) {
  81. if (strncmp(l, p->name, p->len) == 0 &&
  82. - isspace((unsigned char)l[p->len])) {
  83. + isspace(CAST(unsigned char, l[p->len]))) {
  84. if (t)
  85. *t = l + p->len;
  86. break;
  87. @@ -1643,7 +1643,7 @@
  88. {
  89. const char *l = *lp;
  90. - while (!isspace((unsigned char)*++l))
  91. + while (!isspace(CAST(unsigned char, *++l)))
  92. switch (*l) {
  93. case CHAR_INDIRECT_RELATIVE:
  94. m->str_flags |= INDIRECT_RELATIVE;
  95. @@ -1669,7 +1669,7 @@
  96. ++l;
  97. m->mask_op |= op;
  98. - val = (uint64_t)strtoull(l, &t, 0);
  99. + val = CAST(uint64_t, strtoull(l, &t, 0));
  100. l = t;
  101. m->num_mask = file_signextend(ms, m, val);
  102. eatsize(&l);
  103. @@ -1683,7 +1683,7 @@
  104. char *t;
  105. int have_range = 0;
  106. - while (!isspace((unsigned char)*++l)) {
  107. + while (!isspace(CAST(unsigned char, *++l))) {
  108. switch (*l) {
  109. case '0': case '1': case '2':
  110. case '3': case '4': case '5':
  111. @@ -1765,7 +1765,7 @@
  112. goto out;
  113. }
  114. /* allow multiple '/' for readability */
  115. - if (l[1] == '/' && !isspace((unsigned char)l[2]))
  116. + if (l[1] == '/' && !isspace(CAST(unsigned char, l[2])))
  117. l++;
  118. }
  119. if (string_modifier_check(ms, m) == -1)
  120. @@ -1820,7 +1820,7 @@
  121. return -1;
  122. }
  123. m = &me->mp[me->cont_count - 1];
  124. - diff = (int32_t)cont_level - (int32_t)m->cont_level;
  125. + diff = CAST(int32_t, cont_level) - CAST(int32_t, m->cont_level);
  126. if (diff > 1)
  127. file_magwarn(ms, "New continuation level %u is more "
  128. "than one larger than current level %u", cont_level,
  129. @@ -1879,7 +1879,7 @@
  130. }
  131. /* get offset, then skip over it */
  132. - m->offset = (uint32_t)strtoul(l, &t, 0);
  133. + m->offset = CAST(int32_t, strtoul(l, &t, 0));
  134. if (l == t) {
  135. if (ms->flags & MAGIC_CHECK)
  136. file_magwarn(ms, "offset `%s' invalid", l);
  137. @@ -1960,8 +1960,8 @@
  138. m->in_op |= FILE_OPINDIRECT;
  139. l++;
  140. }
  141. - if (isdigit((unsigned char)*l) || *l == '-') {
  142. - m->in_offset = (int32_t)strtol(l, &t, 0);
  143. + if (isdigit(CAST(unsigned char, *l)) || *l == '-') {
  144. + m->in_offset = CAST(int32_t, strtol(l, &t, 0));
  145. if (l == t) {
  146. if (ms->flags & MAGIC_CHECK)
  147. file_magwarn(ms,
  148. @@ -2024,7 +2024,8 @@
  149. */
  150. if (*l == 'd')
  151. m->type = get_standard_integer_type(l, &l);
  152. - else if (*l == 's' && !isalpha((unsigned char)l[1])) {
  153. + else if (*l == 's'
  154. + && !isalpha(CAST(unsigned char, l[1]))) {
  155. m->type = FILE_STRING;
  156. ++l;
  157. }
  158. @@ -2114,8 +2115,8 @@
  159. break;
  160. default:
  161. m->reln = '='; /* the default relation */
  162. - if (*l == 'x' && ((isascii((unsigned char)l[1]) &&
  163. - isspace((unsigned char)l[1])) || !l[1])) {
  164. + if (*l == 'x' && ((isascii(CAST(unsigned char, l[1])) &&
  165. + isspace(CAST(unsigned char, l[1]))) || !l[1])) {
  166. m->reln = *l;
  167. ++l;
  168. }
  169. @@ -2212,11 +2213,11 @@
  170. file_magwarn(ms, "Too large factor `%lu'", factor);
  171. goto out;
  172. }
  173. - if (*el && !isspace((unsigned char)*el)) {
  174. + if (*el && !isspace(CAST(unsigned char, *el))) {
  175. file_magwarn(ms, "Bad factor `%s'", l);
  176. goto out;
  177. }
  178. - m->factor = (uint8_t)factor;
  179. + m->factor = CAST(uint8_t, factor);
  180. if (m->factor == 0 && m->factor_op == FILE_FACTOR_OP_DIV) {
  181. file_magwarn(ms, "Cannot have factor op `%c' and factor %u",
  182. m->factor_op, m->factor);
  183. @@ -2247,7 +2248,7 @@
  184. if (buf[0] != '\0') {
  185. len = nt ? strlen(buf) : len;
  186. file_magwarn(ms, "Current entry already has a %s type "
  187. - "`%.*s', new type `%s'", name, (int)len, buf, l);
  188. + "`%.*s', new type `%s'", name, CAST(int, len), buf, l);
  189. return -1;
  190. }
  191. @@ -2268,7 +2269,7 @@
  192. file_magwarn(ms, "%s type `%s' truncated %"
  193. SIZE_T_FORMAT "u", name, line, i);
  194. } else {
  195. - if (!isspace((unsigned char)*l) && !goodchar(*l, extra))
  196. + if (!isspace(CAST(unsigned char, *l)) && !goodchar(*l, extra))
  197. file_magwarn(ms, "%s type `%s' has bad char '%c'",
  198. name, line, *l);
  199. if (nt)
  200. @@ -2368,7 +2369,7 @@
  201. if (*ptr == '.')
  202. ptr++;
  203. #define CHECKLEN() do { \
  204. - for (len = cnt = 0; isdigit((unsigned char)*ptr); ptr++, cnt++) \
  205. + for (len = cnt = 0; isdigit(CAST(unsigned char, *ptr)); ptr++, cnt++) \
  206. len = len * 10 + (*ptr - '0'); \
  207. if (cnt > 5 || len > 1024) \
  208. goto toolong; \
  209. @@ -2486,11 +2487,11 @@
  210. case FILE_FMT_STR:
  211. if (*ptr == '-')
  212. ptr++;
  213. - while (isdigit((unsigned char )*ptr))
  214. + while (isdigit(CAST(unsigned char, *ptr)))
  215. ptr++;
  216. if (*ptr == '.') {
  217. ptr++;
  218. - while (isdigit((unsigned char )*ptr))
  219. + while (isdigit(CAST(unsigned char , *ptr)))
  220. ptr++;
  221. }
  222. @@ -2634,7 +2635,7 @@
  223. char *ep;
  224. errno = 0;
  225. m->value.q = file_signextend(ms, m,
  226. - (uint64_t)strtoull(*p, &ep, 0));
  227. + CAST(uint64_t, strtoull(*p, &ep, 0)));
  228. if (errno == 0) {
  229. *p = ep;
  230. eatsize(p);
  231. @@ -2969,11 +2970,11 @@
  232. goto error;
  233. }
  234. - map->len = (size_t)st.st_size;
  235. + map->len = CAST(size_t, st.st_size);
  236. #ifdef QUICK
  237. map->type = MAP_TYPE_MMAP;
  238. - if ((map->p = mmap(0, (size_t)st.st_size, PROT_READ|PROT_WRITE,
  239. - MAP_PRIVATE|MAP_FILE, fd, (off_t)0)) == MAP_FAILED) {
  240. + if ((map->p = mmap(0, CAST(size_t, st.st_size), PROT_READ|PROT_WRITE,
  241. + MAP_PRIVATE|MAP_FILE, fd, CAST(off_t, 0))) == MAP_FAILED) {
  242. file_error(ms, errno, "cannot map `%s'", dbname);
  243. goto error;
  244. }
  245. @@ -2993,11 +2994,11 @@
  246. fd = -1;
  247. if (check_buffer(ms, map, dbname) != 0) {
  248. - rv = (struct magic_map *)-1;
  249. + rv = RCAST(struct magic_map *, -1);
  250. goto error;
  251. }
  252. #ifdef QUICK
  253. - if (mprotect(map->p, (size_t)st.st_size, PROT_READ) == -1) {
  254. + if (mprotect(map->p, CAST(size_t, st.st_size), PROT_READ) == -1) {
  255. file_error(ms, errno, "cannot mprotect `%s'", dbname);
  256. goto error;
  257. }
  258. @@ -3041,7 +3042,7 @@
  259. VERSIONNO, dbname, version);
  260. return -1;
  261. }
  262. - entries = (uint32_t)(map->len / sizeof(struct magic));
  263. + entries = CAST(uint32_t, map->len / sizeof(struct magic));
  264. if ((entries * sizeof(struct magic)) != map->len) {
  265. file_error(ms, 0, "Size of `%s' %" SIZE_T_FORMAT "u is not "
  266. "a multiple of %" SIZE_T_FORMAT "u",
  267. @@ -3103,14 +3104,14 @@
  268. hdr.h[1] = VERSIONNO;
  269. memcpy(hdr.h + 2, map->nmagic, nm);
  270. - if (write(fd, &hdr, sizeof(hdr)) != (ssize_t)sizeof(hdr)) {
  271. + if (write(fd, &hdr, sizeof(hdr)) != CAST(ssize_t, sizeof(hdr))) {
  272. file_error(ms, errno, "error writing `%s'", dbname);
  273. goto out;
  274. }
  275. for (i = 0; i < MAGIC_SETS; i++) {
  276. len = m * map->nmagic[i];
  277. - if (write(fd, map->magic[i], len) != (ssize_t)len) {
  278. + if (write(fd, map->magic[i], len) != CAST(ssize_t, len)) {
  279. file_error(ms, errno, "error writing `%s'", dbname);
  280. goto out;
  281. }
  282. @@ -3155,7 +3156,8 @@
  283. q++;
  284. /* Compatibility with old code that looked in .mime */
  285. if (ms->flags & MAGIC_MIME) {
  286. - if (asprintf(&buf, "%.*s.mime%s", (int)(q - fn), fn, ext) < 0)
  287. + if (asprintf(&buf, "%.*s.mime%s", CAST(int, q - fn), fn, ext)
  288. + < 0)
  289. return NULL;
  290. if (access(buf, R_OK) != -1) {
  291. ms->flags &= MAGIC_MIME_TYPE;
  292. @@ -3163,7 +3165,7 @@
  293. }
  294. free(buf);
  295. }
  296. - if (asprintf(&buf, "%.*s%s", (int)(q - fn), fn, ext) < 0)
  297. + if (asprintf(&buf, "%.*s%s", CAST(int, q - fn), fn, ext) < 0)
  298. return NULL;
  299. /* Compatibility with old code that looked in .mime */
  300. @@ -3190,8 +3192,8 @@
  301. swap2(uint16_t sv)
  302. {
  303. uint16_t rv;
  304. - uint8_t *s = (uint8_t *)(void *)&sv;
  305. - uint8_t *d = (uint8_t *)(void *)&rv;
  306. + uint8_t *s = RCAST(uint8_t *, RCAST(void *, &sv));
  307. + uint8_t *d = RCAST(uint8_t *, RCAST(void *, &rv));
  308. d[0] = s[1];
  309. d[1] = s[0];
  310. return rv;
  311. @@ -3204,8 +3206,8 @@
  312. swap4(uint32_t sv)
  313. {
  314. uint32_t rv;
  315. - uint8_t *s = (uint8_t *)(void *)&sv;
  316. - uint8_t *d = (uint8_t *)(void *)&rv;
  317. + uint8_t *s = RCAST(uint8_t *, RCAST(void *, &sv));
  318. + uint8_t *d = RCAST(uint8_t *, RCAST(void *, &rv));
  319. d[0] = s[3];
  320. d[1] = s[2];
  321. d[2] = s[1];
  322. @@ -3220,8 +3222,8 @@
  323. swap8(uint64_t sv)
  324. {
  325. uint64_t rv;
  326. - uint8_t *s = (uint8_t *)(void *)&sv;
  327. - uint8_t *d = (uint8_t *)(void *)&rv;
  328. + uint8_t *s = RCAST(uint8_t *, RCAST(void *, &sv));
  329. + uint8_t *d = RCAST(uint8_t *, RCAST(void *, &rv));
  330. #if 0
  331. d[0] = s[3];
  332. d[1] = s[2];
  333. @@ -3251,9 +3253,9 @@
  334. bs1(struct magic *m)
  335. {
  336. m->cont_level = swap2(m->cont_level);
  337. - m->offset = swap4((uint32_t)m->offset);
  338. - m->in_offset = swap4((uint32_t)m->in_offset);
  339. - m->lineno = swap4((uint32_t)m->lineno);
  340. + m->offset = swap4(CAST(uint32_t, m->offset));
  341. + m->in_offset = swap4(CAST(uint32_t, m->in_offset));
  342. + m->lineno = swap4(CAST(uint32_t, m->lineno));
  343. if (IS_STRING(m->type)) {
  344. m->str_range = swap4(m->str_range);
  345. m->str_flags = swap4(m->str_flags);
  346. @@ -3285,7 +3287,7 @@
  347. file_pstring_get_length(const struct magic *m, const char *ss)
  348. {
  349. size_t len = 0;
  350. - const unsigned char *s = (const unsigned char *)ss;
  351. + const unsigned char *s = RCAST(const unsigned char *, ss);
  352. unsigned int s3, s2, s1, s0;
  353. switch (m->str_flags & PSTRING_LEN) {
  354. --- a/src/ascmagic.c
  355. +++ b/src/ascmagic.c
  356. @@ -117,7 +117,7 @@
  357. int n_nel = 0;
  358. int executable = 0;
  359. - size_t last_line_end = (size_t)-1;
  360. + size_t last_line_end = CAST(size_t, -1);
  361. int has_long_lines = 0;
  362. nbytes = trim_nuls(buf, nbytes);
  363. @@ -141,7 +141,7 @@
  364. == NULL)
  365. goto done;
  366. if ((rv = file_softmagic(ms, utf8_buf,
  367. - (size_t)(utf8_end - utf8_buf), NULL, NULL,
  368. + CAST(size_t, utf8_end - utf8_buf), NULL, NULL,
  369. TEXTTEST, text)) == 0)
  370. rv = -1;
  371. if ((ms->flags & (MAGIC_APPLE|MAGIC_EXTENSION))) {
  372. @@ -317,42 +317,42 @@
  373. if (ubuf[i] <= 0x7f) {
  374. if (end - buf < 1)
  375. return NULL;
  376. - *buf++ = (unsigned char)ubuf[i];
  377. + *buf++ = CAST(unsigned char, ubuf[i]);
  378. } else if (ubuf[i] <= 0x7ff) {
  379. if (end - buf < 2)
  380. return NULL;
  381. - *buf++ = (unsigned char)((ubuf[i] >> 6) + 0xc0);
  382. - *buf++ = (unsigned char)((ubuf[i] & 0x3f) + 0x80);
  383. + *buf++ = CAST(unsigned char, (ubuf[i] >> 6) + 0xc0);
  384. + *buf++ = CAST(unsigned char, (ubuf[i] & 0x3f) + 0x80);
  385. } else if (ubuf[i] <= 0xffff) {
  386. if (end - buf < 3)
  387. return NULL;
  388. - *buf++ = (unsigned char)((ubuf[i] >> 12) + 0xe0);
  389. - *buf++ = (unsigned char)(((ubuf[i] >> 6) & 0x3f) + 0x80);
  390. - *buf++ = (unsigned char)((ubuf[i] & 0x3f) + 0x80);
  391. + *buf++ = CAST(unsigned char, (ubuf[i] >> 12) + 0xe0);
  392. + *buf++ = CAST(unsigned char, ((ubuf[i] >> 6) & 0x3f) + 0x80);
  393. + *buf++ = CAST(unsigned char, (ubuf[i] & 0x3f) + 0x80);
  394. } else if (ubuf[i] <= 0x1fffff) {
  395. if (end - buf < 4)
  396. return NULL;
  397. - *buf++ = (unsigned char)((ubuf[i] >> 18) + 0xf0);
  398. - *buf++ = (unsigned char)(((ubuf[i] >> 12) & 0x3f) + 0x80);
  399. - *buf++ = (unsigned char)(((ubuf[i] >> 6) & 0x3f) + 0x80);
  400. - *buf++ = (unsigned char)((ubuf[i] & 0x3f) + 0x80);
  401. + *buf++ = CAST(unsigned char, (ubuf[i] >> 18) + 0xf0);
  402. + *buf++ = CAST(unsigned char, ((ubuf[i] >> 12) & 0x3f) + 0x80);
  403. + *buf++ = CAST(unsigned char, ((ubuf[i] >> 6) & 0x3f) + 0x80);
  404. + *buf++ = CAST(unsigned char, (ubuf[i] & 0x3f) + 0x80);
  405. } else if (ubuf[i] <= 0x3ffffff) {
  406. if (end - buf < 5)
  407. return NULL;
  408. - *buf++ = (unsigned char)((ubuf[i] >> 24) + 0xf8);
  409. - *buf++ = (unsigned char)(((ubuf[i] >> 18) & 0x3f) + 0x80);
  410. - *buf++ = (unsigned char)(((ubuf[i] >> 12) & 0x3f) + 0x80);
  411. - *buf++ = (unsigned char)(((ubuf[i] >> 6) & 0x3f) + 0x80);
  412. - *buf++ = (unsigned char)((ubuf[i] & 0x3f) + 0x80);
  413. + *buf++ = CAST(unsigned char, (ubuf[i] >> 24) + 0xf8);
  414. + *buf++ = CAST(unsigned char, ((ubuf[i] >> 18) & 0x3f) + 0x80);
  415. + *buf++ = CAST(unsigned char, ((ubuf[i] >> 12) & 0x3f) + 0x80);
  416. + *buf++ = CAST(unsigned char, ((ubuf[i] >> 6) & 0x3f) + 0x80);
  417. + *buf++ = CAST(unsigned char, (ubuf[i] & 0x3f) + 0x80);
  418. } else if (ubuf[i] <= 0x7fffffff) {
  419. if (end - buf < 6)
  420. return NULL;
  421. - *buf++ = (unsigned char)((ubuf[i] >> 30) + 0xfc);
  422. - *buf++ = (unsigned char)(((ubuf[i] >> 24) & 0x3f) + 0x80);
  423. - *buf++ = (unsigned char)(((ubuf[i] >> 18) & 0x3f) + 0x80);
  424. - *buf++ = (unsigned char)(((ubuf[i] >> 12) & 0x3f) + 0x80);
  425. - *buf++ = (unsigned char)(((ubuf[i] >> 6) & 0x3f) + 0x80);
  426. - *buf++ = (unsigned char)((ubuf[i] & 0x3f) + 0x80);
  427. + *buf++ = CAST(unsigned char, (ubuf[i] >> 30) + 0xfc);
  428. + *buf++ = CAST(unsigned char, ((ubuf[i] >> 24) & 0x3f) + 0x80);
  429. + *buf++ = CAST(unsigned char, ((ubuf[i] >> 18) & 0x3f) + 0x80);
  430. + *buf++ = CAST(unsigned char, ((ubuf[i] >> 12) & 0x3f) + 0x80);
  431. + *buf++ = CAST(unsigned char, ((ubuf[i] >> 6) & 0x3f) + 0x80);
  432. + *buf++ = CAST(unsigned char, (ubuf[i] & 0x3f) + 0x80);
  433. } else /* Invalid character */
  434. return NULL;
  435. }
  436. --- a/src/cdf.c
  437. +++ b/src/cdf.c
  438. @@ -68,11 +68,14 @@
  439. uint32_t u;
  440. } cdf_bo;
  441. -#define NEED_SWAP (cdf_bo.u == (uint32_t)0x01020304)
  442. +#define NEED_SWAP (cdf_bo.u == CAST(uint32_t, 0x01020304))
  443. -#define CDF_TOLE8(x) ((uint64_t)(NEED_SWAP ? _cdf_tole8(x) : (uint64_t)(x)))
  444. -#define CDF_TOLE4(x) ((uint32_t)(NEED_SWAP ? _cdf_tole4(x) : (uint32_t)(x)))
  445. -#define CDF_TOLE2(x) ((uint16_t)(NEED_SWAP ? _cdf_tole2(x) : (uint16_t)(x)))
  446. +#define CDF_TOLE8(x) \
  447. + (CAST(uint64_t, NEED_SWAP ? _cdf_tole8(x) : CAST(uint64_t, x)))
  448. +#define CDF_TOLE4(x) \
  449. + (CAST(uint32_t, NEED_SWAP ? _cdf_tole4(x) : CAST(uint32_t, x)))
  450. +#define CDF_TOLE2(x) \
  451. + (CAST(uint16_t, NEED_SWAP ? _cdf_tole2(x) : CAST(uint16_t, x)))
  452. #define CDF_TOLE(x) (/*CONSTCOND*/sizeof(x) == 2 ? \
  453. CDF_TOLE2(CAST(uint16_t, x)) : \
  454. (/*CONSTCOND*/sizeof(x) == 4 ? \
  455. @@ -110,8 +113,8 @@
  456. _cdf_tole2(uint16_t sv)
  457. {
  458. uint16_t rv;
  459. - uint8_t *s = (uint8_t *)(void *)&sv;
  460. - uint8_t *d = (uint8_t *)(void *)&rv;
  461. + uint8_t *s = RCAST(uint8_t *, RCAST(void *, &sv));
  462. + uint8_t *d = RCAST(uint8_t *, RCAST(void *, &rv));
  463. d[0] = s[1];
  464. d[1] = s[0];
  465. return rv;
  466. @@ -124,8 +127,8 @@
  467. _cdf_tole4(uint32_t sv)
  468. {
  469. uint32_t rv;
  470. - uint8_t *s = (uint8_t *)(void *)&sv;
  471. - uint8_t *d = (uint8_t *)(void *)&rv;
  472. + uint8_t *s = RCAST(uint8_t *, RCAST(void *, &sv));
  473. + uint8_t *d = RCAST(uint8_t *, RCAST(void *, &rv));
  474. d[0] = s[3];
  475. d[1] = s[2];
  476. d[2] = s[1];
  477. @@ -140,8 +143,8 @@
  478. _cdf_tole8(uint64_t sv)
  479. {
  480. uint64_t rv;
  481. - uint8_t *s = (uint8_t *)(void *)&sv;
  482. - uint8_t *d = (uint8_t *)(void *)&rv;
  483. + uint8_t *s = RCAST(uint8_t *, RCAST(void *, &sv));
  484. + uint8_t *d = RCAST(uint8_t *, RCAST(void *, &rv));
  485. d[0] = s[7];
  486. d[1] = s[6];
  487. d[2] = s[5];
  488. @@ -206,15 +209,17 @@
  489. h->h_min_size_standard_stream =
  490. CDF_TOLE4(h->h_min_size_standard_stream);
  491. h->h_secid_first_sector_in_short_sat =
  492. - CDF_TOLE4((uint32_t)h->h_secid_first_sector_in_short_sat);
  493. + CDF_TOLE4(CAST(uint32_t, h->h_secid_first_sector_in_short_sat));
  494. h->h_num_sectors_in_short_sat =
  495. CDF_TOLE4(h->h_num_sectors_in_short_sat);
  496. h->h_secid_first_sector_in_master_sat =
  497. - CDF_TOLE4((uint32_t)h->h_secid_first_sector_in_master_sat);
  498. + CDF_TOLE4(CAST(uint32_t, h->h_secid_first_sector_in_master_sat));
  499. h->h_num_sectors_in_master_sat =
  500. CDF_TOLE4(h->h_num_sectors_in_master_sat);
  501. - for (i = 0; i < __arraycount(h->h_master_sat); i++)
  502. - h->h_master_sat[i] = CDF_TOLE4((uint32_t)h->h_master_sat[i]);
  503. + for (i = 0; i < __arraycount(h->h_master_sat); i++) {
  504. + h->h_master_sat[i] =
  505. + CDF_TOLE4(CAST(uint32_t, h->h_master_sat[i]));
  506. + }
  507. }
  508. void
  509. @@ -247,15 +252,16 @@
  510. cdf_swap_dir(cdf_directory_t *d)
  511. {
  512. d->d_namelen = CDF_TOLE2(d->d_namelen);
  513. - d->d_left_child = CDF_TOLE4((uint32_t)d->d_left_child);
  514. - d->d_right_child = CDF_TOLE4((uint32_t)d->d_right_child);
  515. - d->d_storage = CDF_TOLE4((uint32_t)d->d_storage);
  516. + d->d_left_child = CDF_TOLE4(CAST(uint32_t, d->d_left_child));
  517. + d->d_right_child = CDF_TOLE4(CAST(uint32_t, d->d_right_child));
  518. + d->d_storage = CDF_TOLE4(CAST(uint32_t, d->d_storage));
  519. d->d_storage_uuid[0] = CDF_TOLE8(d->d_storage_uuid[0]);
  520. d->d_storage_uuid[1] = CDF_TOLE8(d->d_storage_uuid[1]);
  521. d->d_flags = CDF_TOLE4(d->d_flags);
  522. - d->d_created = CDF_TOLE8((uint64_t)d->d_created);
  523. - d->d_modified = CDF_TOLE8((uint64_t)d->d_modified);
  524. - d->d_stream_first_sector = CDF_TOLE4((uint32_t)d->d_stream_first_sector);
  525. + d->d_created = CDF_TOLE8(CAST(uint64_t, d->d_created));
  526. + d->d_modified = CDF_TOLE8(CAST(uint64_t, d->d_modified));
  527. + d->d_stream_first_sector = CDF_TOLE4(
  528. + CAST(uint32_t, d->d_stream_first_sector));
  529. d->d_size = CDF_TOLE4(d->d_size);
  530. }
  531. @@ -312,11 +318,11 @@
  532. cdf_check_stream_offset(const cdf_stream_t *sst, const cdf_header_t *h,
  533. const void *p, size_t tail, int line)
  534. {
  535. - const char *b = (const char *)sst->sst_tab;
  536. - const char *e = ((const char *)p) + tail;
  537. + const char *b = RCAST(const char *, sst->sst_tab);
  538. + const char *e = RCAST(const char *, p) + tail;
  539. size_t ss = cdf_check_stream(sst, h);
  540. /*LINTED*/(void)&line;
  541. - if (e >= b && (size_t)(e - b) <= ss * sst->sst_len)
  542. + if (e >= b && CAST(size_t, e - b) <= ss * sst->sst_len)
  543. return 0;
  544. DPRINTF(("%d: offset begin %p < end %p || %" SIZE_T_FORMAT "u"
  545. " > %" SIZE_T_FORMAT "u [%" SIZE_T_FORMAT "u %"
  546. @@ -329,23 +335,23 @@
  547. static ssize_t
  548. cdf_read(const cdf_info_t *info, off_t off, void *buf, size_t len)
  549. {
  550. - size_t siz = (size_t)off + len;
  551. + size_t siz = CAST(size_t, off + len);
  552. - if ((off_t)(off + len) != (off_t)siz)
  553. + if (CAST(off_t, off + len) != CAST(off_t, siz))
  554. goto out;
  555. if (info->i_buf != NULL && info->i_len >= siz) {
  556. (void)memcpy(buf, &info->i_buf[off], len);
  557. - return (ssize_t)len;
  558. + return CAST(ssize_t, len);
  559. }
  560. if (info->i_fd == -1)
  561. goto out;
  562. - if (pread(info->i_fd, buf, len, off) != (ssize_t)len)
  563. + if (pread(info->i_fd, buf, len, off) != CAST(ssize_t, len))
  564. return -1;
  565. - return (ssize_t)len;
  566. + return CAST(ssize_t, len);
  567. out:
  568. errno = EINVAL;
  569. return -1;
  570. @@ -357,7 +363,7 @@
  571. char buf[512];
  572. (void)memcpy(cdf_bo.s, "\01\02\03\04", 4);
  573. - if (cdf_read(info, (off_t)0, buf, sizeof(buf)) == -1)
  574. + if (cdf_read(info, CAST(off_t, 0), buf, sizeof(buf)) == -1)
  575. return -1;
  576. cdf_unpack_header(h, buf);
  577. cdf_swap_header(h);
  578. @@ -391,7 +397,7 @@
  579. size_t ss = CDF_SEC_SIZE(h);
  580. size_t pos = CDF_SEC_POS(h, id);
  581. assert(ss == len);
  582. - return cdf_read(info, (off_t)pos, ((char *)buf) + offs, len);
  583. + return cdf_read(info, CAST(off_t, pos), RCAST(char *, buf) + offs, len);
  584. }
  585. ssize_t
  586. @@ -407,8 +413,8 @@
  587. pos + len, CDF_SEC_SIZE(h) * sst->sst_len));
  588. goto out;
  589. }
  590. - (void)memcpy(((char *)buf) + offs,
  591. - ((const char *)sst->sst_tab) + pos, len);
  592. + (void)memcpy(RCAST(char *, buf) + offs,
  593. + RCAST(const char *, sst->sst_tab) + pos, len);
  594. return len;
  595. out:
  596. errno = EFTYPE;
  597. @@ -451,7 +457,7 @@
  598. if (h->h_master_sat[i] < 0)
  599. break;
  600. if (cdf_read_sector(info, sat->sat_tab, ss * i, ss, h,
  601. - h->h_master_sat[i]) != (ssize_t)ss) {
  602. + h->h_master_sat[i]) != CAST(ssize_t, ss)) {
  603. DPRINTF(("Reading sector %d", h->h_master_sat[i]));
  604. goto out1;
  605. }
  606. @@ -468,12 +474,13 @@
  607. DPRINTF(("Reading master sector loop limit"));
  608. goto out3;
  609. }
  610. - if (cdf_read_sector(info, msa, 0, ss, h, mid) != (ssize_t)ss) {
  611. + if (cdf_read_sector(info, msa, 0, ss, h, mid) !=
  612. + CAST(ssize_t, ss)) {
  613. DPRINTF(("Reading master sector %d", mid));
  614. goto out2;
  615. }
  616. for (k = 0; k < nsatpersec; k++, i++) {
  617. - sec = CDF_TOLE4((uint32_t)msa[k]);
  618. + sec = CDF_TOLE4(CAST(uint32_t, msa[k]));
  619. if (sec < 0)
  620. goto out;
  621. if (i >= sat->sat_len) {
  622. @@ -482,13 +489,13 @@
  623. goto out3;
  624. }
  625. if (cdf_read_sector(info, sat->sat_tab, ss * i, ss, h,
  626. - sec) != (ssize_t)ss) {
  627. + sec) != CAST(ssize_t, ss)) {
  628. DPRINTF(("Reading sector %d",
  629. CDF_TOLE4(msa[k])));
  630. goto out2;
  631. }
  632. }
  633. - mid = CDF_TOLE4((uint32_t)msa[nsatpersec]);
  634. + mid = CDF_TOLE4(CAST(uint32_t, msa[nsatpersec]));
  635. }
  636. out:
  637. sat->sat_len = i;
  638. @@ -507,7 +514,7 @@
  639. cdf_count_chain(const cdf_sat_t *sat, cdf_secid_t sid, size_t size)
  640. {
  641. size_t i, j;
  642. - cdf_secid_t maxsector = (cdf_secid_t)((sat->sat_len * size)
  643. + cdf_secid_t maxsector = CAST(cdf_secid_t, (sat->sat_len * size)
  644. / sizeof(maxsector));
  645. DPRINTF(("Chain:"));
  646. @@ -527,7 +534,7 @@
  647. DPRINTF(("Sector %d >= %d\n", sid, maxsector));
  648. goto out;
  649. }
  650. - sid = CDF_TOLE4((uint32_t)sat->sat_tab[sid]);
  651. + sid = CDF_TOLE4(CAST(uint32_t, sat->sat_tab[sid]));
  652. }
  653. if (i == 0) {
  654. DPRINTF((" none, sid: %d\n", sid));
  655. @@ -538,7 +545,7 @@
  656. return i;
  657. out:
  658. errno = EFTYPE;
  659. - return (size_t)-1;
  660. + return CAST(size_t, -1);
  661. }
  662. int
  663. @@ -555,7 +562,7 @@
  664. if (sid == CDF_SECID_END_OF_CHAIN || len == 0)
  665. return cdf_zero_stream(scn);
  666. - if (scn->sst_len == (size_t)-1)
  667. + if (scn->sst_len == CAST(size_t, -1))
  668. goto out;
  669. scn->sst_tab = CDF_CALLOC(scn->sst_len, ss);
  670. @@ -574,7 +581,7 @@
  671. goto out;
  672. }
  673. if ((nr = cdf_read_sector(info, scn->sst_tab, i * ss, ss, h,
  674. - sid)) != (ssize_t)ss) {
  675. + sid)) != CAST(ssize_t, ss)) {
  676. if (i == scn->sst_len - 1 && nr > 0) {
  677. /* Last sector might be truncated */
  678. return 0;
  679. @@ -582,7 +589,7 @@
  680. DPRINTF(("Reading long sector chain %d", sid));
  681. goto out;
  682. }
  683. - sid = CDF_TOLE4((uint32_t)sat->sat_tab[sid]);
  684. + sid = CDF_TOLE4(CAST(uint32_t, sat->sat_tab[sid]));
  685. }
  686. return 0;
  687. out:
  688. @@ -601,7 +608,7 @@
  689. scn->sst_dirlen = len;
  690. scn->sst_ss = ss;
  691. - if (scn->sst_len == (size_t)-1)
  692. + if (scn->sst_len == CAST(size_t, -1))
  693. goto out;
  694. scn->sst_tab = CDF_CALLOC(scn->sst_len, ss);
  695. @@ -620,11 +627,11 @@
  696. goto out;
  697. }
  698. if (cdf_read_short_sector(sst, scn->sst_tab, i * ss, ss, h,
  699. - sid) != (ssize_t)ss) {
  700. + sid) != CAST(ssize_t, ss)) {
  701. DPRINTF(("Reading short sector chain %d", sid));
  702. goto out;
  703. }
  704. - sid = CDF_TOLE4((uint32_t)ssat->sat_tab[sid]);
  705. + sid = CDF_TOLE4(CAST(uint32_t, ssat->sat_tab[sid]));
  706. }
  707. return 0;
  708. out:
  709. @@ -655,7 +662,7 @@
  710. cdf_secid_t sid = h->h_secid_first_directory;
  711. ns = cdf_count_chain(sat, sid, ss);
  712. - if (ns == (size_t)-1)
  713. + if (ns == CAST(size_t, -1))
  714. return -1;
  715. nd = ss / CDF_DIRECTORY_SIZE;
  716. @@ -676,7 +683,8 @@
  717. DPRINTF(("Read dir loop limit"));
  718. goto out;
  719. }
  720. - if (cdf_read_sector(info, buf, 0, ss, h, sid) != (ssize_t)ss) {
  721. + if (cdf_read_sector(info, buf, 0, ss, h, sid) !=
  722. + CAST(ssize_t, ss)) {
  723. DPRINTF(("Reading directory sector %d", sid));
  724. goto out;
  725. }
  726. @@ -684,7 +692,7 @@
  727. cdf_unpack_dir(&dir->dir_tab[i * nd + j],
  728. &buf[j * CDF_DIRECTORY_SIZE]);
  729. }
  730. - sid = CDF_TOLE4((uint32_t)sat->sat_tab[sid]);
  731. + sid = CDF_TOLE4(CAST(uint32_t, sat->sat_tab[sid]));
  732. }
  733. if (NEED_SWAP)
  734. for (i = 0; i < dir->dir_len; i++)
  735. @@ -709,7 +717,7 @@
  736. ssat->sat_tab = NULL;
  737. ssat->sat_len = cdf_count_chain(sat, sid, ss);
  738. - if (ssat->sat_len == (size_t)-1)
  739. + if (ssat->sat_len == CAST(size_t, -1))
  740. goto out;
  741. ssat->sat_tab = CAST(cdf_secid_t *, CDF_CALLOC(ssat->sat_len, ss));
  742. @@ -728,11 +736,11 @@
  743. goto out;
  744. }
  745. if (cdf_read_sector(info, ssat->sat_tab, i * ss, ss, h, sid) !=
  746. - (ssize_t)ss) {
  747. + CAST(ssize_t, ss)) {
  748. DPRINTF(("Reading short sat sector %d", sid));
  749. goto out1;
  750. }
  751. - sid = CDF_TOLE4((uint32_t)sat->sat_tab[sid]);
  752. + sid = CDF_TOLE4(CAST(uint32_t, sat->sat_tab[sid]));
  753. }
  754. return 0;
  755. out:
  756. @@ -782,7 +790,7 @@
  757. {
  758. for (; l--; d++, s++)
  759. if (*d != CDF_TOLE2(*s))
  760. - return (unsigned char)*d - CDF_TOLE2(*s);
  761. + return CAST(unsigned char, *d) - CDF_TOLE2(*s);
  762. return 0;
  763. }
  764. @@ -913,7 +921,7 @@
  765. if (inp->pi_type & CDF_VECTOR)
  766. return 0;
  767. - if ((size_t)(CAST(const char *, e) - CAST(const char *, p)) < len)
  768. + if (CAST(size_t, CAST(const char *, e) - CAST(const char *, p)) < len)
  769. return 0;
  770. (void)memcpy(&inp->pi_val, p, len);
  771. @@ -1099,8 +1107,9 @@
  772. const cdf_summary_info_header_t *si =
  773. CAST(const cdf_summary_info_header_t *, sst->sst_tab);
  774. const cdf_section_declaration_t *sd =
  775. - CAST(const cdf_section_declaration_t *, (const void *)
  776. - ((const char *)sst->sst_tab + CDF_SECTION_DECLARATION_OFFSET));
  777. + CAST(const cdf_section_declaration_t *, RCAST(const void *,
  778. + RCAST(const char *, sst->sst_tab)
  779. + + CDF_SECTION_DECLARATION_OFFSET));
  780. if (cdf_check_stream_offset(sst, h, si, sizeof(*si), __LINE__) == -1 ||
  781. cdf_check_stream_offset(sst, h, sd, sizeof(*sd), __LINE__) == -1)
  782. @@ -1251,28 +1260,28 @@
  783. int days, hours, mins, secs;
  784. ts /= CDF_TIME_PREC;
  785. - secs = (int)(ts % 60);
  786. + secs = CAST(int, ts % 60);
  787. ts /= 60;
  788. - mins = (int)(ts % 60);
  789. + mins = CAST(int, ts % 60);
  790. ts /= 60;
  791. - hours = (int)(ts % 24);
  792. + hours = CAST(int, ts % 24);
  793. ts /= 24;
  794. - days = (int)ts;
  795. + days = CAST(int, ts);
  796. if (days) {
  797. len += snprintf(buf + len, bufsiz - len, "%dd+", days);
  798. - if ((size_t)len >= bufsiz)
  799. + if (CAST(size_t, len) >= bufsiz)
  800. return len;
  801. }
  802. if (days || hours) {
  803. len += snprintf(buf + len, bufsiz - len, "%.2d:", hours);
  804. - if ((size_t)len >= bufsiz)
  805. + if (CAST(size_t, len) >= bufsiz)
  806. return len;
  807. }
  808. len += snprintf(buf + len, bufsiz - len, "%.2d:", mins);
  809. - if ((size_t)len >= bufsiz)
  810. + if (CAST(size_t, len) >= bufsiz)
  811. return len;
  812. len += snprintf(buf + len, bufsiz - len, "%.2d", secs);
  813. @@ -1284,7 +1293,7 @@
  814. {
  815. size_t i;
  816. for (i = 0; i < len && p[i]; i++)
  817. - buf[i] = (char)p[i];
  818. + buf[i] = CAST(char, p[i]);
  819. buf[i] = '\0';
  820. return buf;
  821. }
  822. --- a/src/cdf.h
  823. +++ b/src/cdf.h
  824. @@ -76,9 +76,9 @@
  825. cdf_secid_t h_master_sat[436/4];
  826. } cdf_header_t;
  827. -#define CDF_SEC_SIZE(h) ((size_t)(1 << (h)->h_sec_size_p2))
  828. +#define CDF_SEC_SIZE(h) CAST(size_t, 1 << (h)->h_sec_size_p2)
  829. #define CDF_SEC_POS(h, secid) (CDF_SEC_SIZE(h) + (secid) * CDF_SEC_SIZE(h))
  830. -#define CDF_SHORT_SEC_SIZE(h) ((size_t)(1 << (h)->h_short_sec_size_p2))
  831. +#define CDF_SHORT_SEC_SIZE(h) CAST(size_t, 1 << (h)->h_short_sec_size_p2)
  832. #define CDF_SHORT_SEC_POS(h, secid) ((secid) * CDF_SHORT_SEC_SIZE(h))
  833. typedef int32_t cdf_dirid_t;
  834. --- a/src/cdf_time.c
  835. +++ b/src/cdf_time.c
  836. @@ -90,9 +90,9 @@
  837. if (m == 1 && isleap(year))
  838. days--;
  839. if (days <= 0)
  840. - return (int)m;
  841. + return CAST(int, m);
  842. }
  843. - return (int)m;
  844. + return CAST(int, m);
  845. }
  846. int
  847. @@ -108,22 +108,22 @@
  848. ts->tv_nsec = (t % CDF_TIME_PREC) * 100;
  849. t /= CDF_TIME_PREC;
  850. - tm.tm_sec = (int)(t % 60);
  851. + tm.tm_sec = CAST(int, t % 60);
  852. t /= 60;
  853. - tm.tm_min = (int)(t % 60);
  854. + tm.tm_min = CAST(int, t % 60);
  855. t /= 60;
  856. - tm.tm_hour = (int)(t % 24);
  857. + tm.tm_hour = CAST(int, t % 24);
  858. t /= 24;
  859. /* XXX: Approx */
  860. - tm.tm_year = (int)(CDF_BASE_YEAR + (t / 365));
  861. + tm.tm_year = CAST(int, CDF_BASE_YEAR + (t / 365));
  862. rdays = cdf_getdays(tm.tm_year);
  863. t -= rdays - 1;
  864. - tm.tm_mday = cdf_getday(tm.tm_year, (int)t);
  865. - tm.tm_mon = cdf_getmonth(tm.tm_year, (int)t);
  866. + tm.tm_mday = cdf_getday(tm.tm_year, CAST(int, t));
  867. + tm.tm_mon = cdf_getmonth(tm.tm_year, CAST(int, t));
  868. tm.tm_wday = 0;
  869. tm.tm_yday = 0;
  870. tm.tm_isdst = 0;
  871. @@ -172,7 +172,7 @@
  872. if (ptr != NULL)
  873. return buf;
  874. (void)snprintf(buf, 26, "*Bad* 0x%16.16" INT64_T_FORMAT "x\n",
  875. - (long long)*sec);
  876. + CAST(long long, *sec));
  877. return buf;
  878. }
  879. --- a/src/compress.c
  880. +++ b/src/compress.c
  881. @@ -353,7 +353,7 @@
  882. (void)ioctl(fd, FIONREAD, &t);
  883. }
  884. - if (t > 0 && (size_t)t < n) {
  885. + if (t > 0 && CAST(size_t, t) < n) {
  886. n = t;
  887. rn = n;
  888. }
  889. @@ -411,11 +411,11 @@
  890. return -1;
  891. }
  892. - if (swrite(tfd, startbuf, nbytes) != (ssize_t)nbytes)
  893. + if (swrite(tfd, startbuf, nbytes) != CAST(ssize_t, nbytes))
  894. r = 1;
  895. else {
  896. while ((r = sread(fd, buf, sizeof(buf), 1)) > 0)
  897. - if (swrite(tfd, buf, (size_t)r) != r)
  898. + if (swrite(tfd, buf, CAST(size_t, r)) != r)
  899. break;
  900. }
  901. @@ -440,7 +440,7 @@
  902. return -1;
  903. }
  904. (void)close(tfd);
  905. - if (lseek(fd, (off_t)0, SEEK_SET) == (off_t)-1) {
  906. + if (lseek(fd, CAST(off_t, 0), SEEK_SET) == CAST(off_t, -1)) {
  907. file_badseek(ms);
  908. return -1;
  909. }
  910. @@ -517,7 +517,7 @@
  911. if (rc != Z_OK && rc != Z_STREAM_END)
  912. goto err;
  913. - *n = (size_t)z.total_out;
  914. + *n = CAST(size_t, z.total_out);
  915. rc = inflateEnd(&z);
  916. if (rc != Z_OK)
  917. goto err;
  918. @@ -527,8 +527,8 @@
  919. return OKDATA;
  920. err:
  921. - strlcpy((char *)*newch, z.msg ? z.msg : zError(rc), bytes_max);
  922. - *n = strlen((char *)*newch);
  923. + strlcpy(RCAST(char *, *newch), z.msg ? z.msg : zError(rc), bytes_max);
  924. + *n = strlen(RCAST(char *, *newch));
  925. return ERRDATA;
  926. }
  927. #endif
  928. @@ -548,7 +548,7 @@
  929. *len = 0;
  930. return NODATA;
  931. }
  932. - *buf = (unsigned char *)msg;
  933. + *buf = RCAST(unsigned char *, msg);
  934. *len = strlen(msg);
  935. return ERRDATA;
  936. }
  937. @@ -596,7 +596,7 @@
  938. switch (fork()) {
  939. case 0: /* child */
  940. closefd(fdp[STDOUT_FILENO], 0);
  941. - if (swrite(fdp[STDIN_FILENO][1], old, n) != (ssize_t)n) {
  942. + if (swrite(fdp[STDIN_FILENO][1], old, n) != CAST(ssize_t, n)) {
  943. DPRINTF("Write failed (%s)\n", strerror(errno));
  944. exit(1);
  945. }
  946. @@ -625,17 +625,17 @@
  947. char *buf;
  948. ubuf[n] = '\0';
  949. - buf = (char *)ubuf;
  950. - while (isspace((unsigned char)*buf))
  951. + buf = RCAST(char *, ubuf);
  952. + while (isspace(CAST(unsigned char, *buf)))
  953. buf++;
  954. DPRINTF("Filter error[[[%s]]]\n", buf);
  955. - if ((p = strchr((char *)buf, '\n')) != NULL)
  956. + if ((p = strchr(CAST(char *, buf), '\n')) != NULL)
  957. *p = '\0';
  958. - if ((p = strchr((char *)buf, ';')) != NULL)
  959. + if ((p = strchr(CAST(char *, buf), ';')) != NULL)
  960. *p = '\0';
  961. - if ((p = strrchr((char *)buf, ':')) != NULL) {
  962. + if ((p = strrchr(CAST(char *, buf), ':')) != NULL) {
  963. ++p;
  964. - while (isspace((unsigned char)*p))
  965. + while (isspace(CAST(unsigned char, *p)))
  966. p++;
  967. n = strlen(p);
  968. memmove(ubuf, p, CAST(size_t, n + 1));
  969. @@ -690,15 +690,15 @@
  970. case 0: /* child */
  971. if (fd != -1) {
  972. fdp[STDIN_FILENO][0] = fd;
  973. - (void) lseek(fd, (off_t)0, SEEK_SET);
  974. + (void) lseek(fd, CAST(off_t, 0), SEEK_SET);
  975. }
  976. for (i = 0; i < __arraycount(fdp); i++)
  977. copydesc(CAST(int, i), fdp[i]);
  978. (void)execvp(compr[method].argv[0],
  979. - (char *const *)(intptr_t)compr[method].argv);
  980. - dprintf(STDERR_FILENO, "exec `%s' failed, %s",
  981. + RCAST(char *const *, RCAST(intptr_t, compr[method].argv)));
  982. + dprintf(STDERR_FILENO, "exec `%s' failed, %s",
  983. compr[method].argv[0], strerror(errno));
  984. exit(1);
  985. /*NOTREACHED*/
  986. --- a/src/der.c
  987. +++ b/src/der.c
  988. @@ -56,7 +56,7 @@
  989. #include <err.h>
  990. #endif
  991. -#define DER_BAD ((uint32_t)-1)
  992. +#define DER_BAD CAST(uint32_t, -1)
  993. #define DER_CLASS_UNIVERSAL 0
  994. #define DER_CLASS_APPLICATION 1
  995. @@ -224,7 +224,7 @@
  996. case DER_TAG_UTF8_STRING:
  997. case DER_TAG_IA5_STRING:
  998. case DER_TAG_UTCTIME:
  999. - return snprintf(buf, blen, "%.*s", len, (const char *)q);
  1000. + return snprintf(buf, blen, "%.*s", len, RCAST(const char *, q));
  1001. default:
  1002. break;
  1003. }
  1004. @@ -304,13 +304,13 @@
  1005. s++;
  1006. goto val;
  1007. default:
  1008. - if (!isdigit((unsigned char)*s))
  1009. + if (!isdigit(CAST(unsigned char, *s)))
  1010. return 0;
  1011. slen = 0;
  1012. do
  1013. slen = slen * 10 + *s - '0';
  1014. - while (isdigit((unsigned char)*++s));
  1015. + while (isdigit(CAST(unsigned char, *++s)));
  1016. if ((ms->flags & MAGIC_DEBUG) != 0)
  1017. fprintf(stderr, "%s: len %zu %u\n", __func__,
  1018. slen, tlen);
  1019. --- a/src/elfclass.h
  1020. +++ b/src/elfclass.h
  1021. @@ -41,8 +41,8 @@
  1022. return toomany(ms, "program headers", phnum);
  1023. flags |= FLAGS_IS_CORE;
  1024. if (dophn_core(ms, clazz, swap, fd,
  1025. - (off_t)elf_getu(swap, elfhdr.e_phoff), phnum,
  1026. - (size_t)elf_getu16(swap, elfhdr.e_phentsize),
  1027. + CAST(off_t, elf_getu(swap, elfhdr.e_phoff)), phnum,
  1028. + CAST(size_t, elf_getu16(swap, elfhdr.e_phentsize)),
  1029. fsize, &flags, &notecount) == -1)
  1030. return -1;
  1031. break;
  1032. @@ -56,8 +56,8 @@
  1033. if (shnum > ms->elf_shnum_max)
  1034. return toomany(ms, "section", shnum);
  1035. if (dophn_exec(ms, clazz, swap, fd,
  1036. - (off_t)elf_getu(swap, elfhdr.e_phoff), phnum,
  1037. - (size_t)elf_getu16(swap, elfhdr.e_phentsize),
  1038. + CAST(off_t, elf_getu(swap, elfhdr.e_phoff)), phnum,
  1039. + CAST(size_t, elf_getu16(swap, elfhdr.e_phentsize)),
  1040. fsize, shnum, &flags, &notecount) == -1)
  1041. return -1;
  1042. /*FALLTHROUGH*/
  1043. @@ -66,10 +66,10 @@
  1044. if (shnum > ms->elf_shnum_max)
  1045. return toomany(ms, "section headers", shnum);
  1046. if (doshn(ms, clazz, swap, fd,
  1047. - (off_t)elf_getu(swap, elfhdr.e_shoff), shnum,
  1048. - (size_t)elf_getu16(swap, elfhdr.e_shentsize),
  1049. + CAST(off_t, elf_getu(swap, elfhdr.e_shoff)), shnum,
  1050. + CAST(size_t, elf_getu16(swap, elfhdr.e_shentsize)),
  1051. fsize, elf_getu16(swap, elfhdr.e_machine),
  1052. - (int)elf_getu16(swap, elfhdr.e_shstrndx),
  1053. + CAST(int, elf_getu16(swap, elfhdr.e_shstrndx)),
  1054. &flags, &notecount) == -1)
  1055. return -1;
  1056. break;
  1057. --- a/src/encoding.c
  1058. +++ b/src/encoding.c
  1059. @@ -79,12 +79,12 @@
  1060. *code_mime = "binary";
  1061. mlen = (nbytes + 1) * sizeof((*ubuf)[0]);
  1062. - if ((*ubuf = CAST(unichar *, calloc((size_t)1, mlen))) == NULL) {
  1063. + if ((*ubuf = CAST(unichar *, calloc(CAST(size_t, 1), mlen))) == NULL) {
  1064. file_oomem(ms, mlen);
  1065. goto done;
  1066. }
  1067. mlen = (nbytes + 1) * sizeof(nbuf[0]);
  1068. - if ((nbuf = CAST(unsigned char *, calloc((size_t)1, mlen))) == NULL) {
  1069. + if ((nbuf = CAST(unsigned char *, calloc(CAST(size_t, 1), mlen))) == NULL) {
  1070. file_oomem(ms, mlen);
  1071. goto done;
  1072. }
  1073. @@ -437,7 +437,7 @@
  1074. if (ubf[*ulen - 1] == 0xfffe)
  1075. return 0;
  1076. if (ubf[*ulen - 1] < 128 &&
  1077. - text_chars[(size_t)ubf[*ulen - 1]] != T)
  1078. + text_chars[CAST(size_t, ubf[*ulen - 1])] != T)
  1079. return 0;
  1080. }
  1081. @@ -476,7 +476,7 @@
  1082. if (ubf[*ulen - 1] == 0xfffe)
  1083. return 0;
  1084. if (ubf[*ulen - 1] < 128 &&
  1085. - text_chars[(size_t)ubf[*ulen - 1]] != T)
  1086. + text_chars[CAST(size_t, ubf[*ulen - 1])] != T)
  1087. return 0;
  1088. }
  1089. --- a/src/file.c
  1090. +++ b/src/file.c
  1091. @@ -368,7 +368,8 @@
  1092. }
  1093. else {
  1094. size_t j, wid, nw;
  1095. - for (wid = 0, j = (size_t)optind; j < (size_t)argc; j++) {
  1096. + for (wid = 0, j = CAST(size_t, optind); j < CAST(size_t, argc);
  1097. + j++) {
  1098. nw = file_mbswidth(argv[j]);
  1099. if (nw > wid)
  1100. wid = nw;
  1101. @@ -510,9 +511,8 @@
  1102. (void)putc('\0', stdout);
  1103. if (nulsep < 2) {
  1104. (void)printf("%s", separator);
  1105. - (void)printf("%*s ",
  1106. - (int) (nopad ? 0 : (wid - file_mbswidth(inname))),
  1107. - "");
  1108. + (void)printf("%*s ", CAST(int, nopad ? 0
  1109. + : (wid - file_mbswidth(inname))), "");
  1110. }
  1111. }
  1112. @@ -539,8 +539,8 @@
  1113. while (n > 0) {
  1114. bytesconsumed = mbrtowc(&nextchar, s, n, &state);
  1115. - if (bytesconsumed == (size_t)(-1) ||
  1116. - bytesconsumed == (size_t)(-2)) {
  1117. + if (bytesconsumed == CAST(size_t, -1) ||
  1118. + bytesconsumed == CAST(size_t, -2)) {
  1119. /* Something went wrong, return something reasonable */
  1120. return old_n;
  1121. }
  1122. @@ -598,13 +598,13 @@
  1123. for (sp = p - 1; sp > opts && *sp == ' '; sp--)
  1124. continue;
  1125. - fprintf(stdout, "%.*s", (int)(p - opts), opts);
  1126. + fprintf(stdout, "%.*s", CAST(int, p - opts), opts);
  1127. comma = 0;
  1128. for (i = 0; i < __arraycount(nv); i++) {
  1129. fprintf(stdout, "%s%s", comma++ ? ", " : "", nv[i].name);
  1130. if (i && i % 5 == 0) {
  1131. - fprintf(stdout, ",\n%*s", (int)(p - sp - 1), "");
  1132. + fprintf(stdout, ",\n%*s", CAST(int, p - sp - 1), "");
  1133. comma = 0;
  1134. }
  1135. }
  1136. --- a/src/funcs.c
  1137. +++ b/src/funcs.c
  1138. @@ -350,9 +350,9 @@
  1139. #define OCTALIFY(n, o) \
  1140. /*LINTED*/ \
  1141. (void)(*(n)++ = '\\', \
  1142. - *(n)++ = (((uint32_t)*(o) >> 6) & 3) + '0', \
  1143. - *(n)++ = (((uint32_t)*(o) >> 3) & 7) + '0', \
  1144. - *(n)++ = (((uint32_t)*(o) >> 0) & 7) + '0', \
  1145. + *(n)++ = ((CAST(uint32_t, *(o)) >> 6) & 3) + '0', \
  1146. + *(n)++ = ((CAST(uint32_t, *(o)) >> 3) & 7) + '0', \
  1147. + *(n)++ = ((CAST(uint32_t, *(o)) >> 0) & 7) + '0', \
  1148. (o)++)
  1149. protected const char *
  1150. @@ -398,9 +398,9 @@
  1151. while (op < eop) {
  1152. bytesconsumed = mbrtowc(&nextchar, op,
  1153. - (size_t)(eop - op), &state);
  1154. - if (bytesconsumed == (size_t)(-1) ||
  1155. - bytesconsumed == (size_t)(-2)) {
  1156. + CAST(size_t, eop - op), &state);
  1157. + if (bytesconsumed == CAST(size_t, -1) ||
  1158. + bytesconsumed == CAST(size_t, -2)) {
  1159. mb_conv = 0;
  1160. break;
  1161. }
  1162. @@ -423,7 +423,7 @@
  1163. #endif
  1164. for (np = ms->o.pbuf, op = ms->o.buf; *op;) {
  1165. - if (isprint((unsigned char)*op)) {
  1166. + if (isprint(CAST(unsigned char, *op))) {
  1167. *np++ = *op++;
  1168. } else {
  1169. OCTALIFY(np, op);
  1170. @@ -584,7 +584,7 @@
  1171. file_printable(char *buf, size_t bufsiz, const char *str, size_t slen)
  1172. {
  1173. char *ptr, *eptr = buf + bufsiz - 1;
  1174. - const unsigned char *s = (const unsigned char *)str;
  1175. + const unsigned char *s = RCAST(const unsigned char *, str);
  1176. const unsigned char *es = s + slen;
  1177. for (ptr = buf; ptr < eptr && s < es && *s; s++) {
  1178. --- a/src/is_tar.c
  1179. +++ b/src/is_tar.c
  1180. @@ -92,7 +92,8 @@
  1181. private int
  1182. is_tar(const unsigned char *buf, size_t nbytes)
  1183. {
  1184. - const union record *header = (const union record *)(const void *)buf;
  1185. + const union record *header = RCAST(const union record *,
  1186. + RCAST(const void *, buf));
  1187. size_t i;
  1188. int sum, recsum;
  1189. const unsigned char *p, *ep;
  1190. @@ -141,7 +142,7 @@
  1191. if (digs == 0)
  1192. return -1;
  1193. - while (isspace((unsigned char)*where)) { /* Skip spaces */
  1194. + while (isspace(CAST(unsigned char, *where))) { /* Skip spaces */
  1195. where++;
  1196. if (digs-- == 0)
  1197. return -1; /* All blank field */
  1198. @@ -152,7 +153,7 @@
  1199. digs--;
  1200. }
  1201. - if (digs > 0 && *where && !isspace((unsigned char)*where))
  1202. + if (digs > 0 && *where && !isspace(CAST(unsigned char, *where)))
  1203. return -1; /* Ended on non-(space/NUL) */
  1204. return value;
  1205. --- a/src/magic.c
  1206. +++ b/src/magic.c
  1207. @@ -314,7 +314,8 @@
  1208. {
  1209. if (ms == NULL)
  1210. return -1;
  1211. - return buffer_apprentice(ms, (struct magic **)bufs, sizes, nbufs);
  1212. + return buffer_apprentice(ms, RCAST(struct magic **, bufs),
  1213. + sizes, nbufs);
  1214. }
  1215. #endif
  1216. @@ -407,7 +408,7 @@
  1217. struct stat sb;
  1218. ssize_t nbytes = 0; /* number of bytes read from a datafile */
  1219. int ispipe = 0;
  1220. - off_t pos = (off_t)-1;
  1221. + off_t pos = CAST(off_t, -1);
  1222. if (file_reset(ms) == -1)
  1223. goto out;
  1224. @@ -440,7 +441,7 @@
  1225. if (fstat(fd, &sb) == 0 && S_ISFIFO(sb.st_mode))
  1226. ispipe = 1;
  1227. else
  1228. - pos = lseek(fd, (off_t)0, SEEK_CUR);
  1229. + pos = lseek(fd, CAST(off_t, 0), SEEK_CUR);
  1230. } else {
  1231. int flags = O_RDONLY|O_BINARY|O_NONBLOCK;
  1232. errno = 0;
  1233. @@ -480,8 +481,8 @@
  1234. if (ispipe) {
  1235. ssize_t r = 0;
  1236. - while ((r = sread(fd, (void *)&buf[nbytes],
  1237. - (size_t)(ms->bytes_max - nbytes), 1)) > 0) {
  1238. + while ((r = sread(fd, RCAST(void *, &buf[nbytes]),
  1239. + CAST(size_t, ms->bytes_max - nbytes), 1)) > 0) {
  1240. nbytes += r;
  1241. if (r < PIPE_BUF) break;
  1242. }
  1243. @@ -501,7 +502,7 @@
  1244. _isatty(fd) ? 8 * 1024 :
  1245. #endif
  1246. ms->bytes_max;
  1247. - if ((nbytes = read(fd, (char *)buf, howmany)) == -1) {
  1248. + if ((nbytes = read(fd, RCAST(void *, buf), howmany)) == -1) {
  1249. if (inname == NULL && fd != STDIN_FILENO)
  1250. file_error(ms, errno, "cannot read fd %d", fd);
  1251. else
  1252. @@ -512,13 +513,13 @@
  1253. }
  1254. (void)memset(buf + nbytes, 0, SLOP); /* NUL terminate */
  1255. - if (file_buffer(ms, fd, inname, buf, (size_t)nbytes) == -1)
  1256. + if (file_buffer(ms, fd, inname, buf, CAST(size_t, nbytes)) == -1)
  1257. goto done;
  1258. rv = 0;
  1259. done:
  1260. free(buf);
  1261. if (fd != -1) {
  1262. - if (pos != (off_t)-1)
  1263. + if (pos != CAST(off_t, -1))
  1264. (void)lseek(fd, pos, SEEK_SET);
  1265. close_and_restore(ms, inname, fd, &sb);
  1266. }
  1267. @@ -585,25 +586,25 @@
  1268. {
  1269. switch (param) {
  1270. case MAGIC_PARAM_INDIR_MAX:
  1271. - ms->indir_max = (uint16_t)*(const size_t *)val;
  1272. + ms->indir_max = CAST(uint16_t, *CAST(const size_t *, val));
  1273. return 0;
  1274. case MAGIC_PARAM_NAME_MAX:
  1275. - ms->name_max = (uint16_t)*(const size_t *)val;
  1276. + ms->name_max = CAST(uint16_t, *CAST(const size_t *, val));
  1277. return 0;
  1278. case MAGIC_PARAM_ELF_PHNUM_MAX:
  1279. - ms->elf_phnum_max = (uint16_t)*(const size_t *)val;
  1280. + ms->elf_phnum_max = CAST(uint16_t, *CAST(const size_t *, val));
  1281. return 0;
  1282. case MAGIC_PARAM_ELF_SHNUM_MAX:
  1283. - ms->elf_shnum_max = (uint16_t)*(const size_t *)val;
  1284. + ms->elf_shnum_max = CAST(uint16_t, *CAST(const size_t *, val));
  1285. return 0;
  1286. case MAGIC_PARAM_ELF_NOTES_MAX:
  1287. - ms->elf_notes_max = (uint16_t)*(const size_t *)val;
  1288. + ms->elf_notes_max = CAST(uint16_t, *CAST(const size_t *, val));
  1289. return 0;
  1290. case MAGIC_PARAM_REGEX_MAX:
  1291. - ms->regex_max = (uint16_t)*(const size_t *)val;
  1292. + ms->regex_max = CAST(uint16_t, *CAST(const size_t *, val));
  1293. return 0;
  1294. case MAGIC_PARAM_BYTES_MAX:
  1295. - ms->bytes_max = *(const size_t *)val;
  1296. + ms->bytes_max = *CAST(const size_t *, val);
  1297. return 0;
  1298. default:
  1299. errno = EINVAL;
  1300. @@ -616,25 +617,25 @@
  1301. {
  1302. switch (param) {
  1303. case MAGIC_PARAM_INDIR_MAX:
  1304. - *(size_t *)val = ms->indir_max;
  1305. + *CAST(size_t *, val) = ms->indir_max;
  1306. return 0;
  1307. case MAGIC_PARAM_NAME_MAX:
  1308. - *(size_t *)val = ms->name_max;
  1309. + *CAST(size_t *, val) = ms->name_max;
  1310. return 0;
  1311. case MAGIC_PARAM_ELF_PHNUM_MAX:
  1312. - *(size_t *)val = ms->elf_phnum_max;
  1313. + *CAST(size_t *, val) = ms->elf_phnum_max;
  1314. return 0;
  1315. case MAGIC_PARAM_ELF_SHNUM_MAX:
  1316. - *(size_t *)val = ms->elf_shnum_max;
  1317. + *CAST(size_t *, val) = ms->elf_shnum_max;
  1318. return 0;
  1319. case MAGIC_PARAM_ELF_NOTES_MAX:
  1320. - *(size_t *)val = ms->elf_notes_max;
  1321. + *CAST(size_t *, val) = ms->elf_notes_max;
  1322. return 0;
  1323. case MAGIC_PARAM_REGEX_MAX:
  1324. - *(size_t *)val = ms->regex_max;
  1325. + *CAST(size_t *, val) = ms->regex_max;
  1326. return 0;
  1327. case MAGIC_PARAM_BYTES_MAX:
  1328. - *(size_t *)val = ms->bytes_max;
  1329. + *CAST(size_t *, val) = ms->bytes_max;
  1330. return 0;
  1331. default:
  1332. errno = EINVAL;
  1333. --- a/src/print.c
  1334. +++ b/src/print.c
  1335. @@ -65,7 +65,7 @@
  1336. if (m->in_op & FILE_OPINVERSE)
  1337. (void) fputc('~', stderr);
  1338. (void) fprintf(stderr, "%c%u),",
  1339. - ((size_t)(m->in_op & FILE_OPS_MASK) <
  1340. + (CAST(size_t, m->in_op & FILE_OPS_MASK) <
  1341. SZOF(optyp)) ? optyp[m->in_op & FILE_OPS_MASK] : '?',
  1342. m->in_offset);
  1343. }
  1344. @@ -112,14 +112,14 @@
  1345. (void) fprintf(stderr, "/%u", m->str_range);
  1346. }
  1347. else {
  1348. - if ((size_t)(m->mask_op & FILE_OPS_MASK) < SZOF(optyp))
  1349. + if (CAST(size_t, m->mask_op & FILE_OPS_MASK) < SZOF(optyp))
  1350. (void) fputc(optyp[m->mask_op & FILE_OPS_MASK], stderr);
  1351. else
  1352. (void) fputc('?', stderr);
  1353. if (m->num_mask) {
  1354. (void) fprintf(stderr, "%.8llx",
  1355. - (unsigned long long)m->num_mask);
  1356. + CAST(unsigned long long, m->num_mask));
  1357. }
  1358. }
  1359. (void) fprintf(stderr, ",%c", m->reln);
  1360. @@ -141,7 +141,7 @@
  1361. case FILE_LEQUAD:
  1362. case FILE_QUAD:
  1363. (void) fprintf(stderr, "%" INT64_T_FORMAT "d",
  1364. - (unsigned long long)m->value.q);
  1365. + CAST(long long, m->value.q));
  1366. break;
  1367. case FILE_PSTRING:
  1368. case FILE_STRING:
  1369. @@ -149,7 +149,8 @@
  1370. case FILE_BESTRING16:
  1371. case FILE_LESTRING16:
  1372. case FILE_SEARCH:
  1373. - file_showstr(stderr, m->value.s, (size_t)m->vallen);
  1374. + file_showstr(stderr, m->value.s,
  1375. + CAST(size_t, m->vallen));
  1376. break;
  1377. case FILE_DATE:
  1378. case FILE_LEDATE:
  1379. @@ -221,7 +222,7 @@
  1380. if (ms->file)
  1381. (void) fprintf(stderr, "%s, %lu: ", ms->file,
  1382. - (unsigned long)ms->line);
  1383. + CAST(unsigned long, ms->line));
  1384. (void) fprintf(stderr, "Warning: ");
  1385. va_start(va, f);
  1386. (void) vfprintf(stderr, f, va);
  1387. @@ -243,7 +244,7 @@
  1388. } else {
  1389. // XXX: perhaps detect and print something if overflow
  1390. // on 32 bit time_t?
  1391. - t = (time_t)v;
  1392. + t = CAST(time_t, v);
  1393. }
  1394. if (flags & FILE_T_LOCAL) {
  1395. --- a/src/readcdf.c
  1396. +++ b/src/readcdf.c
  1397. @@ -204,7 +204,7 @@
  1398. && len--; s += k) {
  1399. if (*s == '\0')
  1400. break;
  1401. - if (isprint((unsigned char)*s))
  1402. + if (isprint(CAST(unsigned char, *s)))
  1403. vbuf[j++] = *s;
  1404. }
  1405. if (j == sizeof(vbuf))
  1406. @@ -318,19 +318,19 @@
  1407. case 2:
  1408. if (file_printf(ms, ", Os: Windows, Version %d.%d",
  1409. si.si_os_version & 0xff,
  1410. - (uint32_t)si.si_os_version >> 8) == -1)
  1411. + CAST(uint32_t, si.si_os_version) >> 8) == -1)
  1412. return -2;
  1413. break;
  1414. case 1:
  1415. if (file_printf(ms, ", Os: MacOS, Version %d.%d",
  1416. - (uint32_t)si.si_os_version >> 8,
  1417. + CAST(uint32_t, si.si_os_version) >> 8,
  1418. si.si_os_version & 0xff) == -1)
  1419. return -2;
  1420. break;
  1421. default:
  1422. if (file_printf(ms, ", Os %d, Version: %d.%d", si.si_os,
  1423. si.si_os_version & 0xff,
  1424. - (uint32_t)si.si_os_version >> 8) == -1)
  1425. + CAST(uint32_t, si.si_os_version) >> 8) == -1)
  1426. return -2;
  1427. break;
  1428. }
  1429. @@ -406,7 +406,7 @@
  1430. for (j = 0; str == NULL && j < dir->dir_len; j++) {
  1431. d = &dir->dir_tab[j];
  1432. for (k = 0; k < sizeof(name); k++)
  1433. - name[k] = (char)cdf_tole2(d->d_name[k]);
  1434. + name[k] = CAST(char, cdf_tole2(d->d_name[k]));
  1435. str = cdf_app_to_mime(name,
  1436. NOTMIME(ms) ? name2desc : name2mime);
  1437. }
  1438. --- a/src/readelf.c
  1439. +++ b/src/readelf.c
  1440. @@ -368,9 +368,9 @@
  1441. }
  1442. offset = 0;
  1443. for (;;) {
  1444. - if (offset >= (size_t)bufsize)
  1445. + if (offset >= CAST(size_t, bufsize))
  1446. break;
  1447. - offset = donote(ms, nbuf, offset, (size_t)bufsize,
  1448. + offset = donote(ms, nbuf, offset, CAST(size_t, bufsize),
  1449. clazz, swap, 4, flags, notecount, fd, ph_off,
  1450. ph_num, fsize);
  1451. if (offset == 0)
  1452. @@ -508,7 +508,7 @@
  1453. int swap __attribute__((__unused__)), uint32_t namesz, uint32_t descsz,
  1454. size_t noff, size_t doff, int *flags)
  1455. {
  1456. - if (namesz == 4 && strcmp((char *)&nbuf[noff], "GNU") == 0 &&
  1457. + if (namesz == 4 && strcmp(RCAST(char *, &nbuf[noff]), "GNU") == 0 &&
  1458. type == NT_GNU_BUILD_ID && (descsz >= 4 && descsz <= 20)) {
  1459. uint8_t desc[20];
  1460. const char *btype;
  1461. @@ -544,7 +544,9 @@
  1462. int swap, uint32_t namesz, uint32_t descsz,
  1463. size_t noff, size_t doff, int *flags)
  1464. {
  1465. - if (namesz == 5 && strcmp((char *)&nbuf[noff], "SuSE") == 0 &&
  1466. + const char *name = RCAST(const char *, &nbuf[noff]);
  1467. +
  1468. + if (namesz == 5 && strcmp(name, "SuSE") == 0 &&
  1469. type == NT_GNU_VERSION && descsz == 2) {
  1470. *flags |= FLAGS_DID_OS_NOTE;
  1471. if (file_printf(ms, ", for SuSE %d.%d", nbuf[doff],
  1472. @@ -553,7 +555,7 @@
  1473. return 1;
  1474. }
  1475. - if (namesz == 4 && strcmp((char *)&nbuf[noff], "GNU") == 0 &&
  1476. + if (namesz == 4 && strcmp(name, "GNU") == 0 &&
  1477. type == NT_GNU_VERSION && descsz == 16) {
  1478. uint32_t desc[4];
  1479. (void)memcpy(desc, &nbuf[doff], sizeof(desc));
  1480. @@ -592,7 +594,7 @@
  1481. return 1;
  1482. }
  1483. - if (namesz == 7 && strcmp((char *)&nbuf[noff], "NetBSD") == 0) {
  1484. + if (namesz == 7 && strcmp(name, "NetBSD") == 0) {
  1485. if (type == NT_NETBSD_VERSION && descsz == 4) {
  1486. *flags |= FLAGS_DID_OS_NOTE;
  1487. do_note_netbsd_version(ms, swap, &nbuf[doff]);
  1488. @@ -600,7 +602,7 @@
  1489. }
  1490. }
  1491. - if (namesz == 8 && strcmp((char *)&nbuf[noff], "FreeBSD") == 0) {
  1492. + if (namesz == 8 && strcmp(name, "FreeBSD") == 0) {
  1493. if (type == NT_FREEBSD_VERSION && descsz == 4) {
  1494. *flags |= FLAGS_DID_OS_NOTE;
  1495. do_note_freebsd_version(ms, swap, &nbuf[doff]);
  1496. @@ -608,7 +610,7 @@
  1497. }
  1498. }
  1499. - if (namesz == 8 && strcmp((char *)&nbuf[noff], "OpenBSD") == 0 &&
  1500. + if (namesz == 8 && strcmp(name, "OpenBSD") == 0 &&
  1501. type == NT_OPENBSD_VERSION && descsz == 4) {
  1502. *flags |= FLAGS_DID_OS_NOTE;
  1503. if (file_printf(ms, ", for OpenBSD") == -1)
  1504. @@ -617,7 +619,7 @@
  1505. return 1;
  1506. }
  1507. - if (namesz == 10 && strcmp((char *)&nbuf[noff], "DragonFly") == 0 &&
  1508. + if (namesz == 10 && strcmp(name, "DragonFly") == 0 &&
  1509. type == NT_DRAGONFLY_VERSION && descsz == 4) {
  1510. uint32_t desc;
  1511. *flags |= FLAGS_DID_OS_NOTE;
  1512. @@ -638,7 +640,9 @@
  1513. int swap, uint32_t namesz, uint32_t descsz,
  1514. size_t noff, size_t doff, int *flags)
  1515. {
  1516. - if (namesz == 4 && strcmp((char *)&nbuf[noff], "PaX") == 0 &&
  1517. + const char *name = RCAST(const char *, &nbuf[noff]);
  1518. +
  1519. + if (namesz == 4 && strcmp(name, "PaX") == 0 &&
  1520. type == NT_NETBSD_PAX && descsz == 4) {
  1521. static const char *pax[] = {
  1522. "+mprotect",
  1523. @@ -660,7 +664,7 @@
  1524. return 1;
  1525. for (i = 0; i < __arraycount(pax); i++) {
  1526. - if (((1 << (int)i) & desc) == 0)
  1527. + if (((1 << CAST(int, i)) & desc) == 0)
  1528. continue;
  1529. if (file_printf(ms, "%s%s", did++ ? "," : "",
  1530. pax[i]) == -1)
  1531. @@ -677,6 +681,8 @@
  1532. size_t noff, size_t doff, int *flags, size_t size, int clazz)
  1533. {
  1534. #ifdef ELFCORE
  1535. + const char *name = RCAST(const char *, &nbuf[noff]);
  1536. +
  1537. int os_style = -1;
  1538. /*
  1539. * Sigh. The 2.0.36 kernel in Debian 2.1, at
  1540. @@ -692,16 +698,16 @@
  1541. * doesn't include the terminating null in the
  1542. * name....
  1543. */
  1544. - if ((namesz == 4 && strncmp((char *)&nbuf[noff], "CORE", 4) == 0) ||
  1545. - (namesz == 5 && strcmp((char *)&nbuf[noff], "CORE") == 0)) {
  1546. + if ((namesz == 4 && strncmp(name, "CORE", 4) == 0) ||
  1547. + (namesz == 5 && strcmp(name, "CORE") == 0)) {
  1548. os_style = OS_STYLE_SVR4;
  1549. }
  1550. - if ((namesz == 8 && strcmp((char *)&nbuf[noff], "FreeBSD") == 0)) {
  1551. + if ((namesz == 8 && strcmp(name, "FreeBSD") == 0)) {
  1552. os_style = OS_STYLE_FREEBSD;
  1553. }
  1554. - if ((namesz >= 11 && strncmp((char *)&nbuf[noff], "NetBSD-CORE", 11)
  1555. + if ((namesz >= 11 && strncmp(name, "NetBSD-CORE", 11)
  1556. == 0)) {
  1557. os_style = OS_STYLE_NETBSD;
  1558. }
  1559. @@ -725,7 +731,7 @@
  1560. */
  1561. if (file_printf(ms, ", from '%.31s'",
  1562. file_printable(sbuf, sizeof(sbuf),
  1563. - (const char *)&nbuf[doff + 0x7c], 32)) == -1)
  1564. + RCAST(const char *, &nbuf[doff + 0x7c]), 32)) == -1)
  1565. return 1;
  1566. /*
  1567. @@ -824,8 +830,8 @@
  1568. i = k;
  1569. }
  1570. - cname = (unsigned char *)
  1571. - &nbuf[doff + prpsoffsets(i)];
  1572. + cname = CAST(unsigned char *,
  1573. + &nbuf[doff + prpsoffsets(i)]);
  1574. for (cp = cname; cp < nbuf + size && *cp
  1575. && isprint(*cp); cp++)
  1576. continue;
  1577. @@ -836,7 +842,7 @@
  1578. while (cp > cname && isspace(cp[-1]))
  1579. cp--;
  1580. if (file_printf(ms, ", from '%.*s'",
  1581. - (int)(cp - cname), cname) == -1)
  1582. + CAST(int, cp - cname), cname) == -1)
  1583. return 1;
  1584. *flags |= FLAGS_DID_CORE;
  1585. return 1;
  1586. @@ -863,7 +869,8 @@
  1587. * virtual address in which the "virtaddr" belongs to.
  1588. */
  1589. for ( ; num; num--) {
  1590. - if (pread(fd, xph_addr, xph_sizeof, off) < (ssize_t)xph_sizeof) {
  1591. + if (pread(fd, xph_addr, xph_sizeof, off) <
  1592. + CAST(ssize_t, xph_sizeof)) {
  1593. file_badread(ms);
  1594. return -1;
  1595. }
  1596. @@ -903,7 +910,7 @@
  1597. /* We expect only printable characters, so return if buffer contains
  1598. * non-printable character before the '\0' or just '\0'. */
  1599. - for (bptr = buf; *bptr && isprint((unsigned char)*bptr); bptr++)
  1600. + for (bptr = buf; *bptr && isprint(CAST(unsigned char, *bptr)); bptr++)
  1601. continue;
  1602. if (*bptr != '\0')
  1603. return 0;
  1604. @@ -988,8 +995,8 @@
  1605. if (file_printf(ms, ", %s: '%s'", tag, buf) == -1)
  1606. return 0;
  1607. } else {
  1608. - if (file_printf(ms, ", %s: %d", tag, (int) xauxv_val)
  1609. - == -1)
  1610. + if (file_printf(ms, ", %s: %d", tag,
  1611. + CAST(int, xauxv_val)) == -1)
  1612. return 0;
  1613. }
  1614. }
  1615. @@ -1525,7 +1532,7 @@
  1616. */
  1617. offset = 0;
  1618. for (;;) {
  1619. - if (offset >= (size_t)bufsize)
  1620. + if (offset >= CAST(size_t, bufsize))
  1621. break;
  1622. offset = donote(ms, nbuf, offset,
  1623. (size_t)bufsize, clazz, swap, align,
  1624. --- a/src/softmagic.c
  1625. +++ b/src/softmagic.c
  1626. @@ -63,24 +63,46 @@
  1627. private int cvt_32(union VALUETYPE *, const struct magic *);
  1628. private int cvt_64(union VALUETYPE *, const struct magic *);
  1629. -#define OFFSET_OOB(n, o, i) ((n) < (uint32_t)(o) || (i) > ((n) - (o)))
  1630. -#define BE64(p) (((uint64_t)(p)->hq[0]<<56)|((uint64_t)(p)->hq[1]<<48)| \
  1631. - ((uint64_t)(p)->hq[2]<<40)|((uint64_t)(p)->hq[3]<<32)| \
  1632. - ((uint64_t)(p)->hq[4]<<24)|((uint64_t)(p)->hq[5]<<16)| \
  1633. - ((uint64_t)(p)->hq[6]<<8)|((uint64_t)(p)->hq[7]))
  1634. -#define LE64(p) (((uint64_t)(p)->hq[7]<<56)|((uint64_t)(p)->hq[6]<<48)| \
  1635. - ((uint64_t)(p)->hq[5]<<40)|((uint64_t)(p)->hq[4]<<32)| \
  1636. - ((uint64_t)(p)->hq[3]<<24)|((uint64_t)(p)->hq[2]<<16)| \
  1637. - ((uint64_t)(p)->hq[1]<<8)|((uint64_t)(p)->hq[0]))
  1638. -#define LE32(p) (((uint32_t)(p)->hl[3]<<24)|((uint32_t)(p)->hl[2]<<16)| \
  1639. - ((uint32_t)(p)->hl[1]<<8)|((uint32_t)(p)->hl[0]))
  1640. -#define BE32(p) (((uint32_t)(p)->hl[0]<<24)|((uint32_t)(p)->hl[1]<<16)| \
  1641. - ((uint32_t)(p)->hl[2]<<8)|((uint32_t)(p)->hl[3]))
  1642. -#define ME32(p) (((uint32_t)(p)->hl[1]<<24)|((uint32_t)(p)->hl[0]<<16)| \
  1643. - ((uint32_t)(p)->hl[3]<<8)|((uint32_t)(p)->hl[2]))
  1644. -#define BE16(p) (((uint16_t)(p)->hs[0]<<8)|((uint16_t)(p)->hs[1]))
  1645. -#define LE16(p) (((uint16_t)(p)->hs[1]<<8)|((uint16_t)(p)->hs[0]))
  1646. -#define SEXT(s,v,p) ((s)?(intmax_t)(int##v##_t)(p):(intmax_t)(uint##v##_t)(p))
  1647. +#define OFFSET_OOB(n, o, i) ((n) < CAST(uint32_t, (o)) || (i) > ((n) - (o)))
  1648. +#define BE64(p) ( \
  1649. + (CAST(uint64_t, (p)->hq[0])<<56)| \
  1650. + (CAST(uint64_t, (p)->hq[1])<<48)| \
  1651. + (CAST(uint64_t, (p)->hq[2])<<40)| \
  1652. + (CAST(uint64_t, (p)->hq[3])<<32)| \
  1653. + (CAST(uint64_t, (p)->hq[4])<<24)| \
  1654. + (CAST(uint64_t, (p)->hq[5])<<16)| \
  1655. + (CAST(uint64_t, (p)->hq[6])<<8)| \
  1656. + (CAST(uint64_t, (p)->hq[7])))
  1657. +#define LE64(p) ( \
  1658. + (CAST(uint64_t, (p)->hq[7])<<56)| \
  1659. + (CAST(uint64_t, (p)->hq[6])<<48)| \
  1660. + (CAST(uint64_t, (p)->hq[5])<<40)| \
  1661. + (CAST(uint64_t, (p)->hq[4])<<32)| \
  1662. + (CAST(uint64_t, (p)->hq[3])<<24)| \
  1663. + (CAST(uint64_t, (p)->hq[2])<<16)| \
  1664. + (CAST(uint64_t, (p)->hq[1])<<8)| \
  1665. + (CAST(uint64_t, (p)->hq[0])))
  1666. +#define LE32(p) ( \
  1667. + (CAST(uint32_t, (p)->hl[3])<<24)| \
  1668. + (CAST(uint32_t, (p)->hl[2])<<16)| \
  1669. + (CAST(uint32_t, (p)->hl[1])<<8)| \
  1670. + (CAST(uint32_t, (p)->hl[0])))
  1671. +#define BE32(p) ( \
  1672. + (CAST(uint32_t, (p)->hl[0])<<24)| \
  1673. + (CAST(uint32_t, (p)->hl[1])<<16)| \
  1674. + (CAST(uint32_t, (p)->hl[2])<<8)| \
  1675. + (CAST(uint32_t, (p)->hl[3])))
  1676. +#define ME32(p) ( \
  1677. + (CAST(uint32_t, (p)->hl[1])<<24)| \
  1678. + (CAST(uint32_t, (p)->hl[0])<<16)| \
  1679. + (CAST(uint32_t, (p)->hl[3])<<8)| \
  1680. + (CAST(uint32_t, (p)->hl[2])))
  1681. +
  1682. +#define BE16(p) ((CAST(uint16_t, (p)->hs[0])<<8)|(CAST(uint16_t, (p)->hs[1])))
  1683. +#define LE16(p) ((CAST(uint16_t, (p)->hs[1])<<8)|(CAST(uint16_t, (p)->hs[0])))
  1684. +#define SEXT(s,v,p) ((s) ? \
  1685. + CAST(intmax_t, CAST(int##v##_t, p)) : \
  1686. + CAST(intmax_t, CAST(uint##v##_t, p)))
  1687. /*
  1688. * softmagic - lookup one file in parsed, in-memory copy of database
  1689. @@ -525,13 +547,13 @@
  1690. return -1;
  1691. case 1:
  1692. (void)snprintf(buf, sizeof(buf), "%" INT64_T_FORMAT "u",
  1693. - (unsigned long long)v);
  1694. + CAST(unsigned long long, v));
  1695. if (file_printf(ms, F(ms, m, "%s"), buf) == -1)
  1696. return -1;
  1697. break;
  1698. default:
  1699. if (file_printf(ms, F(ms, m, "%" INT64_T_FORMAT "u"),
  1700. - (unsigned long long) v) == -1)
  1701. + CAST(unsigned long long, v)) == -1)
  1702. return -1;
  1703. break;
  1704. }
  1705. @@ -560,13 +582,13 @@
  1706. if (m->str_flags & STRING_TRIM) {
  1707. char *last;
  1708. - while (isspace((unsigned char)*str))
  1709. + while (isspace(CAST(unsigned char, *str)))
  1710. str++;
  1711. last = str;
  1712. while (*last)
  1713. last++;
  1714. --last;
  1715. - while (isspace((unsigned char)*last))
  1716. + while (isspace(CAST(unsigned char, *last)))
  1717. last--;
  1718. *++last = '\0';
  1719. }
  1720. @@ -673,7 +695,8 @@
  1721. char *cp;
  1722. int rval;
  1723. - cp = strndup((const char *)ms->search.s, ms->search.rm_len);
  1724. + cp = strndup(RCAST(const char *, ms->search.s),
  1725. + ms->search.rm_len);
  1726. if (cp == NULL) {
  1727. file_oomem(ms, ms->search.rm_len);
  1728. return -1;
  1729. @@ -715,7 +738,7 @@
  1730. file_magerror(ms, "invalid m->type (%d) in mprint()", m->type);
  1731. return -1;
  1732. }
  1733. - return (int32_t)t;
  1734. + return CAST(int32_t, t);
  1735. }
  1736. private int
  1737. @@ -760,7 +783,8 @@
  1738. p->s[strcspn(p->s, "\r\n")] = '\0';
  1739. o = CAST(uint32_t, (ms->offset + strlen(p->s)));
  1740. if (m->type == FILE_PSTRING)
  1741. - o += (uint32_t)file_pstring_length_size(m);
  1742. + o += CAST(uint32_t,
  1743. + file_pstring_length_size(m));
  1744. }
  1745. break;
  1746. @@ -826,7 +850,7 @@
  1747. case FILE_DER:
  1748. {
  1749. o = der_offs(ms, m, nbytes);
  1750. - if (o == -1 || (size_t)o > nbytes) {
  1751. + if (o == -1 || CAST(size_t, o) > nbytes) {
  1752. if ((ms->flags & MAGIC_DEBUG) != 0) {
  1753. (void)fprintf(stderr,
  1754. "Bad DER offset %d nbytes=%zu",
  1755. @@ -843,7 +867,7 @@
  1756. break;
  1757. }
  1758. - if ((size_t)o > nbytes) {
  1759. + if (CAST(size_t, o) > nbytes) {
  1760. #if 0
  1761. file_error(ms, 0, "Offset out of range %zu > %zu",
  1762. (size_t)o, nbytes);
  1763. @@ -916,36 +940,36 @@
  1764. return type;
  1765. }
  1766. }
  1767. -#define DO_CVT(fld, cast) \
  1768. +#define DO_CVT(fld, type) \
  1769. if (m->num_mask) \
  1770. switch (m->mask_op & FILE_OPS_MASK) { \
  1771. case FILE_OPAND: \
  1772. - p->fld &= cast m->num_mask; \
  1773. + p->fld &= CAST(type, m->num_mask); \
  1774. break; \
  1775. case FILE_OPOR: \
  1776. - p->fld |= cast m->num_mask; \
  1777. + p->fld |= CAST(type, m->num_mask); \
  1778. break; \
  1779. case FILE_OPXOR: \
  1780. - p->fld ^= cast m->num_mask; \
  1781. + p->fld ^= CAST(type, m->num_mask); \
  1782. break; \
  1783. case FILE_OPADD: \
  1784. - p->fld += cast m->num_mask; \
  1785. + p->fld += CAST(type, m->num_mask); \
  1786. break; \
  1787. case FILE_OPMINUS: \
  1788. - p->fld -= cast m->num_mask; \
  1789. + p->fld -= CAST(type, m->num_mask); \
  1790. break; \
  1791. case FILE_OPMULTIPLY: \
  1792. - p->fld *= cast m->num_mask; \
  1793. + p->fld *= CAST(type, m->num_mask); \
  1794. break; \
  1795. case FILE_OPDIVIDE: \
  1796. - if (cast m->num_mask == 0) \
  1797. + if (CAST(type, m->num_mask) == 0) \
  1798. return -1; \
  1799. - p->fld /= cast m->num_mask; \
  1800. + p->fld /= CAST(type, m->num_mask); \
  1801. break; \
  1802. case FILE_OPMODULO: \
  1803. - if (cast m->num_mask == 0) \
  1804. + if (CAST(type, m->num_mask) == 0) \
  1805. return -1; \
  1806. - p->fld %= cast m->num_mask; \
  1807. + p->fld %= CAST(type, m->num_mask); \
  1808. break; \
  1809. } \
  1810. if (m->mask_op & FILE_OPINVERSE) \
  1811. @@ -954,61 +978,61 @@
  1812. private int
  1813. cvt_8(union VALUETYPE *p, const struct magic *m)
  1814. {
  1815. - DO_CVT(b, (uint8_t));
  1816. + DO_CVT(b, uint8_t);
  1817. return 0;
  1818. }
  1819. private int
  1820. cvt_16(union VALUETYPE *p, const struct magic *m)
  1821. {
  1822. - DO_CVT(h, (uint16_t));
  1823. + DO_CVT(h, uint16_t);
  1824. return 0;
  1825. }
  1826. private int
  1827. cvt_32(union VALUETYPE *p, const struct magic *m)
  1828. {
  1829. - DO_CVT(l, (uint32_t));
  1830. + DO_CVT(l, uint32_t);
  1831. return 0;
  1832. }
  1833. private int
  1834. cvt_64(union VALUETYPE *p, const struct magic *m)
  1835. {
  1836. - DO_CVT(q, (uint64_t));
  1837. + DO_CVT(q, uint64_t);
  1838. return 0;
  1839. }
  1840. -#define DO_CVT2(fld, cast) \
  1841. +#define DO_CVT2(fld, type) \
  1842. if (m->num_mask) \
  1843. switch (m->mask_op & FILE_OPS_MASK) { \
  1844. case FILE_OPADD: \
  1845. - p->fld += cast m->num_mask; \
  1846. + p->fld += CAST(type, m->num_mask); \
  1847. break; \
  1848. case FILE_OPMINUS: \
  1849. - p->fld -= cast m->num_mask; \
  1850. + p->fld -= CAST(type, m->num_mask); \
  1851. break; \
  1852. case FILE_OPMULTIPLY: \
  1853. - p->fld *= cast m->num_mask; \
  1854. + p->fld *= CAST(type, m->num_mask); \
  1855. break; \
  1856. case FILE_OPDIVIDE: \
  1857. - if (cast m->num_mask == 0) \
  1858. + if (CAST(type, m->num_mask) == 0) \
  1859. return -1; \
  1860. - p->fld /= cast m->num_mask; \
  1861. + p->fld /= CAST(type, m->num_mask); \
  1862. break; \
  1863. } \
  1864. private int
  1865. cvt_float(union VALUETYPE *p, const struct magic *m)
  1866. {
  1867. - DO_CVT2(f, (float));
  1868. + DO_CVT2(f, float);
  1869. return 0;
  1870. }
  1871. private int
  1872. cvt_double(union VALUETYPE *p, const struct magic *m)
  1873. {
  1874. - DO_CVT2(d, (double));
  1875. + DO_CVT2(d, double);
  1876. return 0;
  1877. }
  1878. @@ -1073,14 +1097,14 @@
  1879. return 1;
  1880. }
  1881. case FILE_BESHORT:
  1882. - p->h = (short)BE16(p);
  1883. + p->h = CAST(short, BE16(p));
  1884. if (cvt_16(p, m) == -1)
  1885. goto out;
  1886. return 1;
  1887. case FILE_BELONG:
  1888. case FILE_BEDATE:
  1889. case FILE_BELDATE:
  1890. - p->l = (int32_t)BE32(p);
  1891. + p->l = CAST(int32_t, BE32(p));
  1892. if (cvt_32(p, m) == -1)
  1893. goto out;
  1894. return 1;
  1895. @@ -1088,19 +1112,19 @@
  1896. case FILE_BEQDATE:
  1897. case FILE_BEQLDATE:
  1898. case FILE_BEQWDATE:
  1899. - p->q = (uint64_t)BE64(p);
  1900. + p->q = CAST(uint64_t, BE64(p));
  1901. if (cvt_64(p, m) == -1)
  1902. goto out;
  1903. return 1;
  1904. case FILE_LESHORT:
  1905. - p->h = (short)LE16(p);
  1906. + p->h = CAST(short, LE16(p));
  1907. if (cvt_16(p, m) == -1)
  1908. goto out;
  1909. return 1;
  1910. case FILE_LELONG:
  1911. case FILE_LEDATE:
  1912. case FILE_LELDATE:
  1913. - p->l = (int32_t)LE32(p);
  1914. + p->l = CAST(int32_t, LE32(p));
  1915. if (cvt_32(p, m) == -1)
  1916. goto out;
  1917. return 1;
  1918. @@ -1108,14 +1132,14 @@
  1919. case FILE_LEQDATE:
  1920. case FILE_LEQLDATE:
  1921. case FILE_LEQWDATE:
  1922. - p->q = (uint64_t)LE64(p);
  1923. + p->q = CAST(uint64_t, LE64(p));
  1924. if (cvt_64(p, m) == -1)
  1925. goto out;
  1926. return 1;
  1927. case FILE_MELONG:
  1928. case FILE_MEDATE:
  1929. case FILE_MELDATE:
  1930. - p->l = (int32_t)ME32(p);
  1931. + p->l = CAST(int32_t, ME32(p));
  1932. if (cvt_32(p, m) == -1)
  1933. goto out;
  1934. return 1;
  1935. @@ -1294,7 +1318,7 @@
  1936. * might even cause problems
  1937. */
  1938. if (nbytes < sizeof(*p))
  1939. - (void)memset(((char *)(void *)p) + nbytes, '\0',
  1940. + (void)memset(RCAST(char *, RCAST(void *, p)) + nbytes, '\0',
  1941. sizeof(*p) - nbytes);
  1942. return 0;
  1943. }
  1944. @@ -1335,7 +1359,7 @@
  1945. if (m->in_op & FILE_OPINVERSE)
  1946. offset = ~offset;
  1947. - return (uint32_t)offset;
  1948. + return CAST(uint32_t, offset);
  1949. }
  1950. private int
  1951. @@ -1648,8 +1672,8 @@
  1952. * the ctype functions will work correctly without extra
  1953. * casting.
  1954. */
  1955. - const unsigned char *a = (const unsigned char *)s1;
  1956. - const unsigned char *b = (const unsigned char *)s2;
  1957. + const unsigned char *a = RCAST(const unsigned char *, s1);
  1958. + const unsigned char *b = RCAST(const unsigned char *, s2);
  1959. const unsigned char *eb = b + len;
  1960. uint64_t v;
  1961. @@ -1844,13 +1868,15 @@
  1962. case FILE_STRING:
  1963. case FILE_PSTRING:
  1964. l = 0;
  1965. - v = file_strncmp(m->value.s, p->s, (size_t)m->vallen, m->str_flags);
  1966. + v = file_strncmp(m->value.s, p->s, CAST(size_t, m->vallen),
  1967. + m->str_flags);
  1968. break;
  1969. case FILE_BESTRING16:
  1970. case FILE_LESTRING16:
  1971. l = 0;
  1972. - v = file_strncmp16(m->value.s, p->s, (size_t)m->vallen, m->str_flags);
  1973. + v = file_strncmp16(m->value.s, p->s, CAST(size_t, m->vallen),
  1974. + m->str_flags);
  1975. break;
  1976. case FILE_SEARCH: { /* search ms->search.s for the string m->value.s */
  1977. @@ -1892,7 +1918,7 @@
  1978. ((m->str_flags & STRING_IGNORE_CASE) ? REG_ICASE : 0));
  1979. if (rc) {
  1980. file_regerror(&rx, rc, ms);
  1981. - v = (uint64_t)-1;
  1982. + v = CAST(uint64_t, -1);
  1983. } else {
  1984. regmatch_t pmatch;
  1985. size_t slen = ms->search.s_len;
  1986. @@ -1913,15 +1939,15 @@
  1987. search = CCAST(char *, "");
  1988. copy = NULL;
  1989. }
  1990. - rc = file_regexec(&rx, (const char *)search,
  1991. + rc = file_regexec(&rx, RCAST(const char *, search),
  1992. 1, &pmatch, 0);
  1993. free(copy);
  1994. switch (rc) {
  1995. case 0:
  1996. - ms->search.s += (int)pmatch.rm_so;
  1997. - ms->search.offset += (size_t)pmatch.rm_so;
  1998. - ms->search.rm_len =
  1999. - (size_t)(pmatch.rm_eo - pmatch.rm_so);
  2000. + ms->search.s += CAST(int, pmatch.rm_so);
  2001. + ms->search.offset += CAST(size_t, pmatch.rm_so);
  2002. + ms->search.rm_len = CAST(size_t,
  2003. + pmatch.rm_eo - pmatch.rm_so);
  2004. v = 0;
  2005. break;
  2006. @@ -1931,12 +1957,12 @@
  2007. default:
  2008. file_regerror(&rx, rc, ms);
  2009. - v = (uint64_t)-1;
  2010. + v = CAST(uint64_t, -1);
  2011. break;
  2012. }
  2013. }
  2014. file_regfree(&rx);
  2015. - if (v == (uint64_t)-1)
  2016. + if (v == CAST(uint64_t, -1))
  2017. return -1;
  2018. break;
  2019. }
  2020. @@ -1965,7 +1991,7 @@
  2021. case 'x':
  2022. if ((ms->flags & MAGIC_DEBUG) != 0)
  2023. (void) fprintf(stderr, "%" INT64_T_FORMAT
  2024. - "u == *any* = 1\n", (unsigned long long)v);
  2025. + "u == *any* = 1\n", CAST(unsigned long long, v));
  2026. matched = 1;
  2027. break;
  2028. @@ -1973,16 +1999,18 @@
  2029. matched = v != l;
  2030. if ((ms->flags & MAGIC_DEBUG) != 0)
  2031. (void) fprintf(stderr, "%" INT64_T_FORMAT "u != %"
  2032. - INT64_T_FORMAT "u = %d\n", (unsigned long long)v,
  2033. - (unsigned long long)l, matched);
  2034. + INT64_T_FORMAT "u = %d\n",
  2035. + CAST(unsigned long long, v),
  2036. + CAST(unsigned long long, l), matched);
  2037. break;
  2038. case '=':
  2039. matched = v == l;
  2040. if ((ms->flags & MAGIC_DEBUG) != 0)
  2041. (void) fprintf(stderr, "%" INT64_T_FORMAT "u == %"
  2042. - INT64_T_FORMAT "u = %d\n", (unsigned long long)v,
  2043. - (unsigned long long)l, matched);
  2044. + INT64_T_FORMAT "u = %d\n",
  2045. + CAST(unsigned long long, v),
  2046. + CAST(unsigned long long, l), matched);
  2047. break;
  2048. case '>':
  2049. @@ -1991,15 +2019,16 @@
  2050. if ((ms->flags & MAGIC_DEBUG) != 0)
  2051. (void) fprintf(stderr, "%" INT64_T_FORMAT
  2052. "u > %" INT64_T_FORMAT "u = %d\n",
  2053. - (unsigned long long)v,
  2054. - (unsigned long long)l, matched);
  2055. + CAST(unsigned long long, v),
  2056. + CAST(unsigned long long, l), matched);
  2057. }
  2058. else {
  2059. - matched = (int64_t) v > (int64_t) l;
  2060. + matched = CAST(int64_t, v) > CAST(int64_t, l);
  2061. if ((ms->flags & MAGIC_DEBUG) != 0)
  2062. (void) fprintf(stderr, "%" INT64_T_FORMAT
  2063. "d > %" INT64_T_FORMAT "d = %d\n",
  2064. - (long long)v, (long long)l, matched);
  2065. + CAST(long long, v),
  2066. + CAST(long long, l), matched);
  2067. }
  2068. break;
  2069. @@ -2009,15 +2038,16 @@
  2070. if ((ms->flags & MAGIC_DEBUG) != 0)
  2071. (void) fprintf(stderr, "%" INT64_T_FORMAT
  2072. "u < %" INT64_T_FORMAT "u = %d\n",
  2073. - (unsigned long long)v,
  2074. - (unsigned long long)l, matched);
  2075. + CAST(unsigned long long, v),
  2076. + CAST(unsigned long long, l), matched);
  2077. }
  2078. else {
  2079. - matched = (int64_t) v < (int64_t) l;
  2080. + matched = CAST(int64_t, v) < CAST(int64_t, l);
  2081. if ((ms->flags & MAGIC_DEBUG) != 0)
  2082. (void) fprintf(stderr, "%" INT64_T_FORMAT
  2083. "d < %" INT64_T_FORMAT "d = %d\n",
  2084. - (long long)v, (long long)l, matched);
  2085. + CAST(long long, v),
  2086. + CAST(long long, l), matched);
  2087. }
  2088. break;
  2089. @@ -2026,8 +2056,9 @@
  2090. if ((ms->flags & MAGIC_DEBUG) != 0)
  2091. (void) fprintf(stderr, "((%" INT64_T_FORMAT "x & %"
  2092. INT64_T_FORMAT "x) == %" INT64_T_FORMAT
  2093. - "x) = %d\n", (unsigned long long)v,
  2094. - (unsigned long long)l, (unsigned long long)l,
  2095. + "x) = %d\n", CAST(unsigned long long, v),
  2096. + CAST(unsigned long long, l),
  2097. + CAST(unsigned long long, l),
  2098. matched);
  2099. break;
  2100. @@ -2036,9 +2067,9 @@
  2101. if ((ms->flags & MAGIC_DEBUG) != 0)
  2102. (void) fprintf(stderr, "((%" INT64_T_FORMAT "x & %"
  2103. INT64_T_FORMAT "x) != %" INT64_T_FORMAT
  2104. - "x) = %d\n", (unsigned long long)v,
  2105. - (unsigned long long)l, (unsigned long long)l,
  2106. - matched);
  2107. + "x) = %d\n", CAST(unsigned long long, v),
  2108. + CAST(unsigned long long, l),
  2109. + CAST(unsigned long long, l), matched);
  2110. break;
  2111. default: