support for hidding sidecar files.
[rrq/fuse_xattrs.git] / utils.c
diff --git a/utils.c b/utils.c
index 1a05447a43f7e01211dec229a9cbf343a6e25958..10593e6f90d67ed6a414937ea9dc509f22c28ccc 100644 (file)
--- a/utils.c
+++ b/utils.c
@@ -12,7 +12,7 @@
 #include <string.h>
 
 #include "utils.h"
-#include "const.h"
+#include "fuse_xattrs_config.h"
 
 char *prepend_source_directory(const char *a, const char *b) {
     size_t len = strlen(a) + strlen(b) + 1;
@@ -25,12 +25,12 @@ char *prepend_source_directory(const char *a, const char *b) {
 char *get_sidecar_path(const char *path)
 {
     const size_t path_len = strlen(path);
-    const size_t sidecar_ext_len = strlen(SIDECAR_EXT); // this can be optimized
+    const size_t sidecar_ext_len = strlen(BINARY_SIDECAR_EXT); // this can be optimized
     const size_t sidecar_path_len = path_len + sidecar_ext_len + 1;
     char *sidecar_path = (char *) malloc(sidecar_path_len);
     memset(sidecar_path, '\0', sidecar_path_len);
     memcpy(sidecar_path, path, path_len);
-    memcpy(sidecar_path + path_len, SIDECAR_EXT, sidecar_ext_len);
+    memcpy(sidecar_path + path_len, BINARY_SIDECAR_EXT, sidecar_ext_len);
 
     return sidecar_path;
 }
@@ -44,6 +44,24 @@ char *sanitize_value(const char *value, size_t value_size)
     return sanitized;
 }
 
+
+const size_t BINARY_SIDECAR_EXT_SIZE = strlen(BINARY_SIDECAR_EXT);
+
+const int filename_is_sidecar(const char *string) {
+    if(string == NULL)
+        return 0;
+
+    size_t size = strlen(string);
+    if (size <= BINARY_SIDECAR_EXT_SIZE)
+        return 0;
+
+    if (memcmp(string+size-BINARY_SIDECAR_EXT_SIZE, BINARY_SIDECAR_EXT, BINARY_SIDECAR_EXT_SIZE) == 0) {
+        return 1;
+    }
+
+    return 0;
+}
+
 enum namespace get_namespace(const char *name) {
     if (strncmp(name, "user.", strlen("user.")) == 0) {
         return USER;