X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=etc%2Fafpd%2Fspotlight_marshalling.c;h=29bd234c5dae44b1999bbb32d3d15e4b82dcc608;hb=40c614d84ae5bf7c1808a30a2ccac8db12228519;hp=e3bfc268cbbe411697c2f0d02399fca0c07f8914;hpb=b04fc8cfa1da6409b9ed706cdb058068302c30bd;p=netatalk.git diff --git a/etc/afpd/spotlight_marshalling.c b/etc/afpd/spotlight_marshalling.c index e3bfc268..29bd234c 100644 --- a/etc/afpd/spotlight_marshalling.c +++ b/etc/afpd/spotlight_marshalling.c @@ -33,8 +33,7 @@ #include #include #include - -#include "spotlight.h" +#include #define MAX_SLQ_DAT (DSI_DATASIZ - 64) #define MAX_SLQ_TOC 8192 @@ -222,7 +221,7 @@ EC_CLEANUP: static int sl_pack_CNID(sl_cnids_t *cnids, char *buf, int offset, char *toc_buf, int *toc_idx) { EC_INIT; - int len = 0, off = 0; + int off = 0, len; int cnid_count = talloc_array_length(cnids->ca_cnids->dd_talloc_array); uint64_t id; @@ -231,7 +230,11 @@ static int sl_pack_CNID(sl_cnids_t *cnids, char *buf, int offset, char *toc_buf, *toc_idx += 1; offset += 8; - EC_ZERO( slvalc(buf, offset, MAX_SLQ_DAT, sl_pack_tag(SQ_TYPE_CNIDS, 2 + cnid_count, 8 /* unknown meaning, but always 8 */)) ); + len = cnid_count + 1; + if (cnid_count > 0) + len ++; + + EC_ZERO( slvalc(buf, offset, MAX_SLQ_DAT, sl_pack_tag(SQ_TYPE_CNIDS, len, 8 /* unknown meaning, but always 8 */)) ); offset += 8; if (cnid_count > 0) { @@ -302,7 +305,13 @@ static int sl_pack_filemeta(sl_filemeta_t *fm, char *buf, int offset, char *toc_ offset += 16; EC_NEG1( fmlen = sl_pack(fm, buf + offset) ); - offset += fmlen; + + /* Check for empty filemeta array, if it's only 40 bytes, it's only the header but no content */ + LOG(log_debug, logtype_sl, "fmlen: %d", fmlen); + if (fmlen > 40) + offset += fmlen; + else + fmlen = 0; EC_ZERO( slvalc(buf, saveoff + 8, MAX_SLQ_DAT, sl_pack_tag(SQ_TYPE_DATA, (fmlen / 8) + 1, 8 /* unknown meaning, but always 8 */)) );