u_int16_t offcnt; /* Offspring count */
struct finderinfo finfo; /* Finder info */
char lname[64]; /* Long name */
- char utf8name[512]; /* UTF8 name */
+ char utf8name[514]; /* UTF8 or UCS2 name */ /* for convert_charset dest_len parameter +2 */
};
/*
}
/* Removes checked items from top of directory stack. Returns index of the first unchecked elements or -1. */
-static int reducestack()
+static int reducestack(void)
{
int r;
if (save_cidx != -1) {
}
/* Clears directory stack. */
-static void clearstack()
+static void clearstack(void)
{
save_cidx = -1;
while (dsidx > 0) {
/* -------------------- */
static struct finderinfo *
-unpack_finderinfo(char *upath, struct adouble *adp, struct finderinfo *finfo)
+unpack_finderinfo(struct vol *vol, struct path *path, struct adouble **adp, struct finderinfo *finfo)
{
packed_finder buf;
void *ptr;
- ptr = get_finderinfo(upath, adp, &buf);
+ *adp = adl_lkup(vol, path, *adp);
+ ptr = get_finderinfo(vol, path->u_name, *adp, &buf);
return unpack_buffer(finfo, ptr);
}
struct adouble *adp = NULL;
time_t c_date, b_date;
u_int32_t ac_date, ab_date;
- static char convbuf[512];
+ static char convbuf[514]; /* for convert_charset dest_len parameter +2 */
size_t len;
if (S_ISDIR(path->st.st_mode)) {
/* Check file type ID */
if ((c1.rbitmap & (1<<DIRPBIT_FINFO)) && c2.finfo.f_type != 0) {
- adp = adl_lkup(vol, path, adp);
- finfo = unpack_finderinfo(path->u_name, adp, &finderinfo);
+ finfo = unpack_finderinfo(vol, path, &adp, &finderinfo);
if (finfo->f_type != c1.finfo.f_type)
goto crit_check_ret;
}
/* Check creator ID */
if ((c1.rbitmap & (1<<DIRPBIT_FINFO)) && c2.finfo.creator != 0) {
if (!finfo) {
- adp = adl_lkup(vol, path, adp);
- finfo = unpack_finderinfo(path->u_name, adp, &finderinfo);
+ finfo = unpack_finderinfo(vol, path, &adp, &finderinfo);
}
if (finfo->creator != c1.finfo.creator)
goto crit_check_ret;
/* Check finder info attributes */
if ((c1.rbitmap & (1<<DIRPBIT_FINFO)) && c2.finfo.attrs != 0) {
if (!finfo) {
- adp = adl_lkup(vol, path, adp);
- finfo = unpack_finderinfo(path->u_name, adp, &finderinfo);
+ finfo = unpack_finderinfo(vol, path, &adp, &finderinfo);
}
if ((finfo->attrs & c2.finfo.attrs) != c1.finfo.attrs)
/* Check label */
if ((c1.rbitmap & (1<<DIRPBIT_FINFO)) && c2.finfo.label != 0) {
if (!finfo) {
- adp = adl_lkup(vol, path, adp);
- finfo = unpack_finderinfo(path->u_name, adp, &finderinfo);
+ finfo = unpack_finderinfo(vol, path, &adp, &finderinfo);
}
if ((finfo->label & c2.finfo.label) != c1.finfo.label)
goto crit_check_ret;
{
char *p = *buf;
- int ret, tbuf =0;
+ int ret;
+ size_t tbuf =0;
u_int16_t resultsize;
int isdir = S_ISDIR(path->st.st_mode);
} /* catsearch() */
/* -------------------------- */
-int catsearch_afp(AFPObj *obj _U_, char *ibuf, int ibuflen,
- char *rbuf, int *rbuflen, int ext)
+static int catsearch_afp(AFPObj *obj _U_, char *ibuf, size_t ibuflen,
+ char *rbuf, size_t *rbuflen, int ext)
{
struct vol *vol;
u_int16_t vid;
}
/* Parse file specifications */
- spec1 = ibuf;
- spec2 = ibuf + spec_len + 2;
+ spec1 = (unsigned char*)ibuf;
+ spec2 = (unsigned char*)ibuf + spec_len + 2;
spec1 += 2;
spec2 += 2;
} /* catsearch_afp */
/* -------------------------- */
-int afp_catsearch (AFPObj *obj, char *ibuf, int ibuflen,
- char *rbuf, int *rbuflen)
+int afp_catsearch (AFPObj *obj, char *ibuf, size_t ibuflen,
+ char *rbuf, size_t *rbuflen)
{
return catsearch_afp( obj, ibuf, ibuflen, rbuf, rbuflen, 0);
}
-int afp_catsearch_ext (AFPObj *obj, char *ibuf, int ibuflen,
- char *rbuf, int *rbuflen)
+int afp_catsearch_ext (AFPObj *obj, char *ibuf, size_t ibuflen,
+ char *rbuf, size_t *rbuflen)
{
return catsearch_afp( obj, ibuf, ibuflen, rbuf, rbuflen, 1);
}