summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--src/eyefiservice.cc6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/eyefiservice.cc b/src/eyefiservice.cc
index d7f0f04..77526b9 100644
--- a/src/eyefiservice.cc
+++ b/src/eyefiservice.cc
@@ -1,13 +1,14 @@
#include <cassert>
#include <iostream>
#include <fstream>
#include <stdexcept>
#include <iterator>
+#include <algorithm>
#include <syslog.h>
#include <sys/wait.h>
#include <autosprintf.h>
#include "eyekinfig.h"
#include "eyetil.h"
#include "soapeyefiService.h"
static binary_t session_nonce;
@@ -163,17 +164,20 @@ int eyefiService::UploadPhoto(
#endif
tarchive_t a((*i).ptr,(*i).size);
while(a.read_next_header()) {
std::string f = indir.get_file(a.entry_pathname());
std::string::size_type fl = f.length();
if(fl<4) continue;
const char *s = f.c_str()+fl-4;
- if(!(strcasecmp(s,".JPG") && strcasecmp(s,".AVI")))
+ static const char *suffixes[] = { ".JPG",".AVI",".MP4",".NEF",".RAW",".TIF" };
+ if(std::find_if(suffixes,suffixes+sizeof(suffixes)/sizeof(*suffixes),
+ std::not1(std::bind1st(std::ptr_fun(strcasecmp),s)))
+ != suffixes+sizeof(suffixes)/sizeof(*suffixes))
tf = f;
else if(!strcasecmp(s,".log"))
lf = f;
else continue;
int fd=open(f.c_str(),O_CREAT|O_WRONLY,0666);
if(fd<0)
throw std::runtime_error(gnu::autosprintf("failed to create output file '%s'",f.c_str()));
if(!a.read_data_into_fd(fd))