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 */
};
/*
#define DS_BSIZE 128
-static int cur_pos = 0; /* Saved position index (ID) - used to remember "position" across FPCatSearch calls */
+static u_int32_t cur_pos = 0; /* Saved position index (ID) - used to remember "position" across FPCatSearch calls */
static DIR *dirpos = NULL; /* UNIX structure describing currently opened directory. */
static int save_cidx = -1; /* Saved index of currently scanned directory. */
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)) {
if ((c1.rbitmap & (1<<DIRPBIT_LNAME))) {
if ( (size_t)(-1) == (len = convert_string(vol->v_maccharset, CH_UCS2, path->m_name, strlen(path->m_name), convbuf, 512)) )
goto crit_check_ret;
- convbuf[len] = 0;
+
if ((c1.rbitmap & (1<<CATPBIT_PARTIAL))) {
if (strcasestr_w( (ucs2_t*) convbuf, (ucs2_t*) c1.lname) == NULL)
goto crit_check_ret;
if ( (size_t)(-1) == (len = convert_charset( CH_UTF8_MAC, CH_UCS2, CH_UTF8, path->m_name, strlen(path->m_name), convbuf, 512, &flags))) {
goto crit_check_ret;
}
- convbuf[len] = 0;
+
if (c1.rbitmap & (1<<CATPBIT_PARTIAL)) {
if (strcasestr_w((ucs2_t *) convbuf, (ucs2_t*)c1.utf8name) == NULL)
goto crit_check_ret;
*/
#define NUM_ROUNDS 100
static int catsearch(struct vol *vol, struct dir *dir,
- int rmatches, int *pos, char *rbuf, u_int32_t *nrecs, int *rsize, int ext)
+ int rmatches, u_int32_t *pos, char *rbuf, u_int32_t *nrecs, int *rsize, int ext)
{
int cidx, r;
struct dirent *entry;
int num_rounds = NUM_ROUNDS;
int cached;
- if (*pos != 0 && *pos != cur_pos)
- return AFPERR_CATCHNG;
+ if (*pos != 0 && *pos != cur_pos) {
+ result = AFPERR_CATCHNG;
+ goto catsearch_end;
+ }
/* FIXME: Category "offspring count ! */
} /* catsearch() */
/* -------------------------- */
-int catsearch_afp(AFPObj *obj, char *ibuf, int ibuflen,
+int catsearch_afp(AFPObj *obj _U_, char *ibuf, int ibuflen,
char *rbuf, int *rbuflen, int ext)
{
struct vol *vol;
/* Get the long filename */
memcpy(tmppath, bspec1 + spec1[1] + 1, (bspec1 + spec1[1])[0]);
tmppath[(bspec1 + spec1[1])[0]]= 0;
- len = convert_string ( vol->v_maccharset, CH_UCS2, tmppath, strlen(tmppath), c1.lname, 64);
+ len = convert_string ( vol->v_maccharset, CH_UCS2, tmppath, strlen(tmppath), c1.lname, sizeof(c1.lname));
if (len == (size_t)(-1))
return AFPERR_PARAM;
- c1.lname[len] = 0;
#if 0
/* FIXME: do we need it ? It's always null ! */
len = convert_charset(CH_UTF8_MAC, CH_UCS2, CH_UTF8, c1.utf8name, namelen, c1.utf8name, 512, &flags);
if (len == (size_t)(-1))
return AFPERR_PARAM;
- c1.utf8name[len]=0;
}
/* Call search */