]> arthur.barton.de Git - netatalk.git/blobdiff - etc/afpd/spotlight_marshalling.c
Move and rename Spotlight module
[netatalk.git] / etc / afpd / spotlight_marshalling.c
index e3bfc268cbbe411697c2f0d02399fca0c07f8914..29bd234c5dae44b1999bbb32d3d15e4b82dcc608 100644 (file)
@@ -33,8 +33,7 @@
 #include <atalk/netatalk_conf.h>
 #include <atalk/volume.h>
 #include <atalk/dsi.h>
-
-#include "spotlight.h"
+#include <atalk/spotlight.h>
 
 #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 */)) );