+2009-05-08 13:40 Christos Zoulas <christos@zoulas.com>
+
+ * lint fixes and more from NetBSD
+
2009-05-06 10:25 Christos Zoulas <christos@zoulas.com>
* Avoid null dereference in cdf code (Drew Yao)
-.\" $File: file.man,v 1.78 2008/11/06 21:17:45 rrt Exp $
+.\" $File: file.man,v 1.79 2008/11/06 22:49:08 rrt Exp $
.Dd October 9, 2008
.Dt FILE __CSECTION__
.Os
.Ar testname
from the list of tests made to determine the file type. Valid test names
are:
-.Bl -tag -width
+.Bl -tag -width compress
.It apptype
.Dv EMX
application type (only on EMX).
!:mime application/zip
>4 byte 0x14
>>30 ubelong !0x6d696d65 Zip archive data, at least v2.0 to extract
+>0x161 string WINZIP Zip archive data, WinZIP self-extracting
!:mime application/zip
# OpenOffice.org / KOffice / StarOffice documents
!:mime application/x-iso9660-image
32776 string CDROM High Sierra CD-ROM filesystem data
+# .cso files
+0 string CISO Compressed ISO CD image
+
# cramfs filesystem - russell@coker.com.au
0 lelong 0x28cd3d45 Linux Compressed ROM File System data, little endian
>4 lelong x size %lu
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: apprentice.c,v 1.150 2009/02/17 16:29:03 christos Exp $")
+FILE_RCSID("@(#)$File: apprentice.c,v 1.151 2009/03/18 15:19:23 christos Exp $")
#endif /* lint */
#include "magic.h"
(*errs)++;
} else {
/* read and parse this file */
- for (ms->line = 1; fgets(line, sizeof(line), f) != NULL; ms->line++) {
+ for (ms->line = 1;
+ fgets(line, CAST(int, sizeof(line)), f) != NULL;
+ ms->line++) {
size_t len;
len = strlen(line);
if (len == 0) /* null line, garbage, etc */
return -1;
}
me->mp = m = nm;
- me->max_count = cnt;
+ me->max_count = CAST(uint32_t, cnt);
}
m = &me->mp[me->cont_count++];
(void)memset(m, 0, sizeof(*m));
m->cont_level = 0;
me->cont_count = 1;
}
- m->lineno = lineno;
+ m->lineno = CAST(uint32_t, lineno);
if (*l == '&') { /* m->cont_level == 0 checked below. */
++l; /* step over */
file_magwarn(ms,
"multiple ranges");
have_range = 1;
- m->str_range = strtoul(l, &t, 0);
+ m->str_range = CAST(uint32_t,
+ strtoul(l, &t, 0));
if (m->str_range == 0)
file_magwarn(ms,
"zero range");
}
out:
*p = '\0';
- m->vallen = p - origp;
+ m->vallen = CAST(unsigned char, (p - origp));
if (m->type == FILE_PSTRING)
m->vallen++;
return s;
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: cdf.c,v 1.29 2009/05/06 14:27:30 christos Exp $")
+FILE_RCSID("@(#)$File: cdf.c,v 1.30 2009/05/06 14:29:47 christos Exp $")
#endif
#include <assert.h>
#define NEED_SWAP (cdf_bo.u == (uint32_t)0x01020304)
-#define CDF_TOLE8(x) (NEED_SWAP ? cdf_tole8(x) : (uint64_t)(x))
-#define CDF_TOLE4(x) (NEED_SWAP ? cdf_tole4(x) : (uint32_t)(x))
-#define CDF_TOLE2(x) (NEED_SWAP ? cdf_tole2(x) : (uint16_t)(x))
+#define CDF_TOLE8(x) ((uint64_t)(NEED_SWAP ? cdf_tole8(x) : (uint64_t)(x)))
+#define CDF_TOLE4(x) ((uint32_t)(NEED_SWAP ? cdf_tole4(x) : (uint32_t)(x)))
+#define CDF_TOLE2(x) ((uint16_t)(NEED_SWAP ? cdf_tole2(x) : (uint16_t)(x)))
/*
* swap a short
h->h_min_size_standard_stream =
CDF_TOLE4(h->h_min_size_standard_stream);
h->h_secid_first_sector_in_short_sat =
- CDF_TOLE4(h->h_secid_first_sector_in_short_sat);
+ CDF_TOLE4((uint32_t)h->h_secid_first_sector_in_short_sat);
h->h_num_sectors_in_short_sat =
CDF_TOLE4(h->h_num_sectors_in_short_sat);
h->h_secid_first_sector_in_master_sat =
- CDF_TOLE4(h->h_secid_first_sector_in_master_sat);
+ CDF_TOLE4((uint32_t)h->h_secid_first_sector_in_master_sat);
h->h_num_sectors_in_master_sat =
CDF_TOLE4(h->h_num_sectors_in_master_sat);
for (i = 0; i < __arraycount(h->h_master_sat); i++)
- h->h_master_sat[i] = CDF_TOLE4(h->h_master_sat[i]);
+ h->h_master_sat[i] = CDF_TOLE4((uint32_t)h->h_master_sat[i]);
}
void
cdf_swap_dir(cdf_directory_t *d)
{
d->d_namelen = CDF_TOLE2(d->d_namelen);
- d->d_left_child = CDF_TOLE4(d->d_left_child);
- d->d_right_child = CDF_TOLE4(d->d_right_child);
- d->d_storage = CDF_TOLE4(d->d_storage);
+ d->d_left_child = CDF_TOLE4((uint32_t)d->d_left_child);
+ d->d_right_child = CDF_TOLE4((uint32_t)d->d_right_child);
+ d->d_storage = CDF_TOLE4((uint32_t)d->d_storage);
d->d_storage_uuid[0] = CDF_TOLE8(d->d_storage_uuid[0]);
d->d_storage_uuid[1] = CDF_TOLE8(d->d_storage_uuid[1]);
d->d_flags = CDF_TOLE4(d->d_flags);
- d->d_created = CDF_TOLE8(d->d_created);
- d->d_modified = CDF_TOLE8(d->d_modified);
- d->d_stream_first_sector = CDF_TOLE4(d->d_stream_first_sector);
+ d->d_created = CDF_TOLE8((uint64_t)d->d_created);
+ d->d_modified = CDF_TOLE8((uint64_t)d->d_modified);
+ d->d_stream_first_sector = CDF_TOLE4((uint32_t)d->d_stream_first_sector);
d->d_size = CDF_TOLE4(d->d_size);
}
goto out2;
}
for (k = 0; k < nsatpersec; k++, i++) {
- sec = CDF_TOLE4(msa[k]);
+ sec = CDF_TOLE4((uint32_t)msa[k]);
if (sec < 0)
goto out;
if (i >= sat->sat_len) {
goto out2;
}
}
- mid = CDF_TOLE4(msa[nsatpersec]);
+ mid = CDF_TOLE4((uint32_t)msa[nsatpersec]);
}
out:
sat->sat_len = i;
errno = EFTYPE;
return (size_t)-1;
}
- sid = CDF_TOLE4(sat->sat_tab[sid]);
+ sid = CDF_TOLE4((uint32_t)sat->sat_tab[sid]);
}
DPRINTF(("\n"));
return i;
DPRINTF(("Reading long sector chain %d", sid));
goto out;
}
- sid = CDF_TOLE4(sat->sat_tab[sid]);
+ sid = CDF_TOLE4((uint32_t)sat->sat_tab[sid]);
}
return 0;
out:
DPRINTF(("Reading short sector chain %d", sid));
goto out;
}
- sid = CDF_TOLE4(ssat->sat_tab[sid]);
+ sid = CDF_TOLE4((uint32_t)ssat->sat_tab[sid]);
}
return 0;
out:
cdf_unpack_dir(&dir->dir_tab[i * nd + j],
&buf[j * CDF_DIRECTORY_SIZE]);
}
- sid = CDF_TOLE4(sat->sat_tab[sid]);
+ sid = CDF_TOLE4((uint32_t)sat->sat_tab[sid]);
}
if (NEED_SWAP)
for (i = 0; i < dir->dir_len; i++)
DPRINTF(("Reading short sat sector %d", sid));
goto out;
}
- sid = CDF_TOLE4(sat->sat_tab[sid]);
+ sid = CDF_TOLE4((uint32_t)sat->sat_tab[sid]);
}
return 0;
out:
*info = inp;
inp += *count;
*count += sh.sh_properties;
- p = (const void *)((const char *)sst->sst_tab + offs + sizeof(sh));
- e = (const void *)(((const char *)shp) + sh.sh_len);
+ p = (const void *)((const char *)(const void *)sst->sst_tab +
+ offs + sizeof(sh));
+ e = (const void *)(((const char *)(const void *)shp) + sh.sh_len);
if (cdf_check_stream_offset(sst, e, 0) == -1)
goto out;
for (i = 0; i < sh.sh_properties; i++) {
- q = (const uint32_t *)((const char *)p +
+ q = (const uint32_t *)(const void *)
+ ((const char *)(const void *)p +
CDF_TOLE4(p[(i << 1) + 1])) - 2;
if (q > e) {
DPRINTF(("Ran of the end %p > %p\n", q, e));
if (inp[i].pi_type & CDF_VECTOR)
goto unknown;
(void)memcpy(&s32, &q[o], sizeof(s32));
- inp[i].pi_s32 = CDF_TOLE4(s32);
+ inp[i].pi_s32 = CDF_TOLE4((uint32_t)s32);
break;
case CDF_BOOL:
case CDF_UNSIGNED32:
if (inp[i].pi_type & CDF_VECTOR)
goto unknown;
(void)memcpy(&s64, &q[o], sizeof(s64));
- inp[i].pi_s64 = CDF_TOLE4(s64);
+ inp[i].pi_s64 = CDF_TOLE8((uint64_t)s64);
break;
case CDF_UNSIGNED64:
if (inp[i].pi_type & CDF_VECTOR)
goto unknown;
(void)memcpy(&u64, &q[o], sizeof(u64));
- inp[i].pi_u64 = CDF_TOLE4(u64);
+ inp[i].pi_u64 = CDF_TOLE8((uint64_t)u64);
break;
case CDF_LENGTH32_STRING:
if (nelements > 1) {
for (j = 0; j < nelements; j++, i++) {
uint32_t l = CDF_TOLE4(q[o]);
inp[i].pi_str.s_len = l;
- inp[i].pi_str.s_buf = (const char *)(&q[o+1]);
+ inp[i].pi_str.s_buf =
+ (const char *)(const void *)(&q[o+1]);
DPRINTF(("l = %d, r = %d, s = %s\n", l,
CDF_ROUND(l, sizeof(l)),
inp[i].pi_str.s_buf));
- l = 4 + CDF_ROUND(l, sizeof(l));
+ l = 4 + (uint32_t)CDF_ROUND(l, sizeof(l));
o += l >> 2;
}
i--;
if (inp[i].pi_type & CDF_VECTOR)
goto unknown;
(void)memcpy(&tp, &q[o], sizeof(tp));
- inp[i].pi_tp = CDF_TOLE8(tp);
+ inp[i].pi_tp = CDF_TOLE8((uint64_t)tp);
break;
case CDF_CLIPBOARD:
if (inp[i].pi_type & CDF_VECTOR)
int
cdf_print_elapsed_time(char *buf, size_t bufsiz, cdf_timestamp_t ts)
{
- size_t len = 0;
+ int len = 0;
int days, hours, mins, secs;
ts /= CDF_TIME_PREC;
- secs = ts % 60;
+ secs = (int)(ts % 60);
ts /= 60;
- mins = ts % 60;
+ mins = (int)(ts % 60);
ts /= 60;
- hours = ts % 24;
+ hours = (int)(ts % 24);
ts /= 24;
- days = ts;
+ days = (int)ts;
if (days) {
len += snprintf(buf + len, bufsiz - len, "%dd+", days);
- if (len >= bufsiz)
+ if ((size_t)len >= bufsiz)
return len;
}
if (days || hours) {
len += snprintf(buf + len, bufsiz - len, "%.2d:", hours);
- if (len >= bufsiz)
+ if ((size_t)len >= bufsiz)
return len;
}
len += snprintf(buf + len, bufsiz - len, "%.2d:", mins);
- if (len >= bufsiz)
+ if ((size_t)len >= bufsiz)
return len;
len += snprintf(buf + len, bufsiz - len, "%.2d", secs);
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: cdf_time.c,v 1.5 2009/02/03 20:27:51 christos Exp $")
+FILE_RCSID("@(#)$File: cdf_time.c,v 1.6 2009/03/10 11:44:29 christos Exp $")
#endif
#include <time.h>
ts->tv_nsec = (t % CDF_TIME_PREC) * 100;
t /= CDF_TIME_PREC;
- tm.tm_sec = t % 60;
+ tm.tm_sec = (int)(t % 60);
t /= 60;
- tm.tm_min = t % 60;
+ tm.tm_min = (int)(t % 60);
t /= 60;
- tm.tm_hour = t % 24;
+ tm.tm_hour = (int)(t % 24);
t /= 24;
// XXX: Approx
- tm.tm_year = CDF_BASE_YEAR + (t / 365);
+ tm.tm_year = (int)(CDF_BASE_YEAR + (t / 365));
rdays = cdf_getdays(tm.tm_year);
t -= rdays;
- tm.tm_mday = cdf_getday(tm.tm_year, t);
- tm.tm_mon = cdf_getmonth(tm.tm_year, t);
+ tm.tm_mday = cdf_getday(tm.tm_year, (int)t);
+ tm.tm_mon = cdf_getmonth(tm.tm_year, (int)t);
tm.tm_wday = 0;
tm.tm_yday = 0;
tm.tm_isdst = 0;
}
int
+/*ARGSUSED*/
cdf_timespec_to_timestamp(cdf_timestamp_t *t, const struct timespec *ts)
{
+#ifndef __lint__
(void)&t;
(void)&ts;
+#endif
#ifdef notyet
struct tm tm;
if (gmtime_r(&ts->ts_sec, &tm) == NULL) {
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: compress.c,v 1.62 2009/03/05 22:40:28 christos Exp $")
+FILE_RCSID("@(#)$File: compress.c,v 1.63 2009/03/23 14:21:51 christos Exp $")
#endif
#include "magic.h"
private ssize_t
swrite(int fd, const void *buf, size_t n)
{
- int rv;
+ ssize_t rv;
size_t rn = n;
do
return -1;
default:
n -= rv;
- buf = ((const char *)buf) + rv;
+ buf = CAST(const char *, buf) + rv;
break;
}
while (n > 0);
protected ssize_t
sread(int fd, void *buf, size_t n, int canbepipe)
{
- int rv, cnt;
+ ssize_t rv, cnt;
#ifdef FIONREAD
int t = 0;
#endif
size_t nbytes)
{
char buf[4096];
- int r, tfd;
+ ssize_t r;
+ int tfd, te;
(void)strlcpy(buf, "/tmp/file.XXXXXX", sizeof buf);
#ifndef HAVE_MKSTEMP
}
#else
tfd = mkstemp(buf);
- r = errno;
+ te = errno;
(void)unlink(buf);
- errno = r;
+ errno = te;
#endif
if (tfd == -1) {
file_error(ms, errno,
/* XXX: const castaway, via strchr */
z.next_in = (Bytef *)strchr((const char *)old + data_start,
old[data_start]);
- z.avail_in = n - data_start;
+ z.avail_in = CAST(uint32_t, (n - data_start));
z.next_out = *newch;
z.avail_out = HOWMANY;
z.zalloc = Z_NULL;
z.zfree = Z_NULL;
z.opaque = Z_NULL;
+ /* LINTED bug in header macro */
rc = inflateInit2(&z, -15);
if (rc != Z_OK) {
file_error(ms, 0, "zlib: %s", z.msg);
const unsigned char *old, unsigned char **newch, size_t n)
{
int fdin[2], fdout[2];
- int r;
+ ssize_t r;
#ifdef BUILTIN_DECOMPRESS
/* FIXME: This doesn't cope with bzip2 */
*/
/*
* file.h - definitions for file(1) program
- * @(#)$File: file.h,v 1.118 2009/02/03 20:27:51 christos Exp $
+ * @(#)$File: file.h,v 1.119 2009/02/04 18:24:32 christos Exp $
*/
#ifndef __file_h__
#ifdef __cplusplus
#define CAST(T, b) static_cast<T>(b)
#else
-#define CAST(T, b) (b)
+#define CAST(T, b) (T)(b)
#endif
struct level_info {
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: fsmagic.c,v 1.58 2008/11/22 17:01:28 chl Exp $")
+FILE_RCSID("@(#)$File: fsmagic.c,v 1.59 2009/02/03 20:27:51 christos Exp $")
#endif /* lint */
#include "magic.h"
int mime = ms->flags & MAGIC_MIME;
#ifdef S_IFLNK
char buf[BUFSIZ+4];
- int nch;
+ ssize_t nch;
struct stat tstatbuf;
#endif
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: funcs.c,v 1.52 2009/02/13 18:24:18 christos Exp $")
+FILE_RCSID("@(#)$File: funcs.c,v 1.53 2009/04/07 11:07:00 christos Exp $")
#endif /* lint */
#include "magic.h"
/*VARARGS*/
private void
file_error_core(struct magic_set *ms, int error, const char *f, va_list va,
- uint32_t lineno)
+ size_t lineno)
{
/* Only the first error is ok */
if (ms->event_flags & EVENT_HAD_ERR)
if (lineno != 0) {
free(ms->o.buf);
ms->o.buf = NULL;
- file_printf(ms, "line %u: ", lineno);
+ file_printf(ms, "line %zu: ", lineno);
}
file_vprintf(ms, f, va);
if (error > 0)
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: magic.c,v 1.61 2009/02/20 15:19:20 christos Exp $")
+FILE_RCSID("@(#)$File: magic.c,v 1.62 2009/03/20 21:25:41 christos Exp $")
#endif /* lint */
#include "magic.h"
struct magic_set *ms;
size_t len;
- if ((ms = CAST(magic_set *, calloc((size_t)1,
+ if ((ms = CAST(struct magic_set *, calloc((size_t)1,
sizeof(struct magic_set)))) == NULL)
return NULL;
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: readcdf.c,v 1.17 2009/05/05 22:48:51 christos Exp $")
+FILE_RCSID("@(#)$File: readcdf.c,v 1.18 2009/05/06 20:48:22 christos Exp $")
#endif
#include <stdlib.h>
switch (si.si_os) {
case 2:
if (file_printf(ms, ", Os: Windows, Version %d.%d",
- si.si_os_version & 0xff, si.si_os_version >> 8)
- == -1)
+ si.si_os_version & 0xff,
+ (uint32_t)si.si_os_version >> 8) == -1)
return -1;
break;
case 1:
if (file_printf(ms, ", Os: MacOS, Version %d.%d",
- si.si_os_version >> 8, si.si_os_version & 0xff)
- == -1)
+ (uint32_t)si.si_os_version >> 8,
+ si.si_os_version & 0xff) == -1)
return -1;
break;
default:
if (file_printf(ms, ", Os %d, Version: %d.%d", si.si_os,
- si.si_os_version & 0xff, si.si_os_version >> 8)
- == -1)
+ si.si_os_version & 0xff,
+ (uint32_t)si.si_os_version >> 8) == -1)
return -1;
break;
}
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: readelf.c,v 1.80 2008/10/18 20:47:48 christos Exp $")
+FILE_RCSID("@(#)$File: readelf.c,v 1.81 2008/11/04 16:38:28 christos Exp $")
#endif
#ifdef BUILTIN_ELF
const char *linking_style = "statically";
const char *shared_libraries = "";
unsigned char nbuf[BUFSIZ];
- int bufsize;
+ ssize_t bufsize;
size_t offset, align;
off_t savedoffset = (off_t)-1;
struct stat st;
shared_libraries = " (uses shared libs)";
break;
case PT_NOTE:
- if ((align = xph_align) & 0x80000000) {
+ if ((align = xph_align) & 0x80000000UL) {
if (file_printf(ms,
", invalid note alignment 0x%lx",
(unsigned long)align) == -1)
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: softmagic.c,v 1.134 2009/03/10 20:52:50 christos Exp $")
+FILE_RCSID("@(#)$File: softmagic.c,v 1.135 2009/03/27 22:42:49 christos Exp $")
#endif /* lint */
#include "magic.h"
{
switch (m->type) {
case FILE_BYTE:
- return ms->offset + sizeof(char);
+ return CAST(int32_t, (ms->offset + sizeof(char)));
case FILE_SHORT:
case FILE_BESHORT:
case FILE_LESHORT:
- return ms->offset + sizeof(short);
+ return CAST(int32_t, (ms->offset + sizeof(short)));
case FILE_LONG:
case FILE_BELONG:
case FILE_LELONG:
case FILE_MELONG:
- return ms->offset + sizeof(int32_t);
+ return CAST(int32_t, (ms->offset + sizeof(int32_t)));
case FILE_QUAD:
case FILE_BEQUAD:
case FILE_LEQUAD:
- return ms->offset + sizeof(int64_t);
+ return CAST(int32_t, (ms->offset + sizeof(int64_t)));
case FILE_STRING:
case FILE_PSTRING:
if (*m->value.s == '\0')
p->s[strcspn(p->s, "\n")] = '\0';
- t = ms->offset + strlen(p->s);
+ t = CAST(uint32_t, (ms->offset + strlen(p->s)));
if (m->type == FILE_PSTRING)
t++;
return t;
case FILE_BEDATE:
case FILE_LEDATE:
case FILE_MEDATE:
- return ms->offset + sizeof(time_t);
+ return CAST(int32_t, (ms->offset + sizeof(time_t)));
case FILE_LDATE:
case FILE_BELDATE:
case FILE_LELDATE:
case FILE_MELDATE:
- return ms->offset + sizeof(time_t);
+ return CAST(int32_t, (ms->offset + sizeof(time_t)));
case FILE_QDATE:
case FILE_BEQDATE:
case FILE_LEQDATE:
- return ms->offset + sizeof(uint64_t);
+ return CAST(int32_t, (ms->offset + sizeof(uint64_t)));
case FILE_QLDATE:
case FILE_BEQLDATE:
case FILE_LEQLDATE:
- return ms->offset + sizeof(uint64_t);
+ return CAST(int32_t, (ms->offset + sizeof(uint64_t)));
case FILE_FLOAT:
case FILE_BEFLOAT:
case FILE_LEFLOAT:
- return ms->offset + sizeof(float);
+ return CAST(int32_t, (ms->offset + sizeof(float)));
case FILE_DOUBLE:
case FILE_BEDOUBLE:
case FILE_LEDOUBLE:
- return ms->offset + sizeof(double);
- break;
+ return CAST(int32_t, (ms->offset + sizeof(double)));
case FILE_REGEX:
if ((m->str_flags & REGEX_OFFSET_START) != 0)
- return ms->search.offset;
+ return CAST(int32_t, ms->search.offset);
else
- return ms->search.offset + ms->search.rm_len;
+ return CAST(int32_t, (ms->search.offset +
+ ms->search.rm_len));
case FILE_SEARCH:
if ((m->str_flags & REGEX_OFFSET_START) != 0)
- return ms->search.offset;
+ return CAST(int32_t, ms->search.offset);
else
- return ms->search.offset + m->vallen;
+ return CAST(int32_t, (ms->search.offset + m->vallen));
case FILE_DEFAULT:
return ms->offset;
if (indir == 0) {
switch (type) {
case FILE_SEARCH:
- ms->search.s = (const char *)s + offset;
+ ms->search.s = CAST(const char *, s) + offset;
ms->search.s_len = nbytes - offset;
ms->search.offset = offset;
return 0;
ms->search.s = NULL;
return 0;
}
- buf = (const char *)s + offset;
- end = last = (const char *)s + nbytes;
+ buf = CAST(const char *, s) + offset;
+ end = last = CAST(const char *, s) + nbytes;
/* mget() guarantees buf <= last */
- for (lines = linecnt, b = buf;
- lines && ((b = memchr(c = b, '\n', end - b)) || (b = memchr(c, '\r', end - c)));
+ for (lines = linecnt, b = buf; lines &&
+ ((b = memchr(c = b, '\n', CAST(size_t, (end - b))))
+ || (b = memchr(c, '\r', CAST(size_t, (end - c)))));
lines--, b++) {
last = b;
if (b[0] == '\r' && b[1] == '\n')
b++;
}
if (lines)
- last = (const char *)s + nbytes;
+ last = CAST(const char *, s) + nbytes;
ms->search.s = buf;
ms->search.s_len = last - buf;