#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
+#include <dirent.h>
#include "config.h"
void metadata_write_image_file(const char *buf, int len) {
+// warning -- this removes all files from the directory apart from this one, if it exists
+
uint8_t img_md5[16];
// uint8_t ap_md5[16];
size_t pl = strlen(config.cover_art_cache_dir) + 1 + strlen(prefix) + strlen(img_md5_str) + 1 +
strlen(ext);
+
char *path = malloc(pl + 1);
snprintf(path, pl + 1, "%s/%s%s.%s", config.cover_art_cache_dir, prefix, img_md5_str, ext);
int cover_fd = open(path, O_WRONLY | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
}
close(cover_fd);
free(path);
+
+ // now delete all other files, if there are any
+ DIR *d;
+ struct dirent *dir;
+ d = opendir(config.cover_art_cache_dir);
+ if (d) {
+ int fnl = strlen(prefix)+strlen(img_md5_str)+1+strlen(ext)+1;
+
+ char *full_filename = malloc(fnl);
+ if (full_filename==NULL)
+ die("Can't allocate memory at metadata_write_image_file.");
+ memset(full_filename,0,fnl);
+ snprintf(full_filename, fnl, "%s%s.%s", prefix, img_md5_str, ext);
+ debug(1,"Full filename is \"%s\".",full_filename);
+ int dir_fd = open(config.cover_art_cache_dir, O_DIRECTORY);
+ if (dir_fd>0) {
+ while ((dir = readdir(d)) != NULL) {
+ if (dir->d_type == DT_REG) {
+ if(strcmp(full_filename,dir->d_name)!=0) {
+ debug(1,"Deleting file \"%s\".",dir->d_name);
+ if (unlinkat(dir_fd, dir->d_name, 0)!=0) {
+ debug(1,"Error %d deleting cover art file \"%s\".",errno,dir->d_name);
+ }
+ }
+ }
+ }
+ } else {
+ debug(1,"Can't open the directory for deletion.");
+ }
+ free(full_filename);
+ closedir(d);
+ }
} else {
if (errno == EEXIST)
debug(1, "Cover art file \"%s\" already exists!", path);