* Hide sidecar files by default
* Added man page
* Fix crash
+* Remove sidecar when removing a file (same for renaming)
* Optimization: don't open/close files for every operation
Release 0.1 (2016-10-23)
.removexattr = xmp_removexattr,
};
-
-int is_directory(const char *path) {
- struct stat statbuf;
- if (stat(path, &statbuf) != 0) {
- fprintf(stderr, "cannot get source directory status: %s\n", path);
- return -1;
- }
-
- if (!S_ISDIR(statbuf.st_mode)) {
- fprintf(stderr, "source directory must be a directory: %s\n", path);
- return -1;
- }
-
- return 1;
-}
-
/**
* Check if the path is valid. If it's a relative path,
* prepend the working path.
char *_path = prepend_source_directory(path);
res = unlink(_path);
- free(_path);
- if (res == -1)
+ if (res == -1) {
+ free(_path);
return -errno;
+ }
+
+ char *sidecar_path = get_sidecar_path(_path);
+ if (is_regular_file(sidecar_path)) {
+ if (unlink(sidecar_path) == -1) {
+ error_print("Error removing sidecar file: %s\n", sidecar_path);
+ }
+ }
+ free(sidecar_path);
+ free(_path);
return 0;
}
+// FIXME: remove sidecar
int xmp_rmdir(const char *path) {
int res;
if (xattrs_config.show_sidecar == 0 && filename_is_sidecar(path) == 1) {
char *_from = prepend_source_directory(from);
char *_to = prepend_source_directory(to);
res = rename(_from, _to);
- free(_from);
- free(_to);
- if (res == -1)
+ if (res == -1) {
+ free(_from);
+ free(_to);
return -errno;
+ }
+
+ char *from_sidecar_path = get_sidecar_path(_from);
+ char *to_sidecar_path = get_sidecar_path(_to);
+
+ // FIXME: Remove to_sidecar_path if it exists ?
+ if (is_regular_file(from_sidecar_path)) {
+ if (rename(from_sidecar_path, to_sidecar_path) == -1) {
+ error_print("Error renaming sidecar. from: %s to: %s\n", from_sidecar_path, to_sidecar_path);
+ }
+ }
+ free(from_sidecar_path);
+ free(to_sidecar_path);
+
+ free(_from);
+ free(_to);
return 0;
}
+// TODO: handle sidecar file ?
int xmp_link(const char *from, const char *to) {
int res;
if (xattrs_config.show_sidecar == 0) {
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <sys/stat.h>
#include "utils.h"
#include "fuse_xattrs_config.h"
return dst;
}
+int is_directory(const char *path) {
+ struct stat statbuf;
+ if (stat(path, &statbuf) != 0) {
+ fprintf(stderr, "cannot get source directory status: %s\n", path);
+ return -1;
+ }
+
+ if (!S_ISDIR(statbuf.st_mode)) {
+ fprintf(stderr, "source directory must be a directory: %s\n", path);
+ return -1;
+ }
+
+ return 1;
+}
+
+int is_regular_file(const char *path) {
+ struct stat statbuf;
+ if (stat(path, &statbuf) != 0) {
+ return -1;
+ }
+
+ if (!S_ISREG(statbuf.st_mode)) {
+ return -1;
+ }
+
+ return 1;
+}
+
char *get_sidecar_path(const char *path)
{
const size_t path_len = strlen(path);
const size_t BINARY_SIDECAR_EXT_SIZE;
const int filename_is_sidecar(const char *string);
+int is_directory(const char *path);
+int is_regular_file(const char *path);
+
#endif //FUSE_XATTRS_UTILS_H