summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--src/eyefiservice.cc21
1 files changed, 9 insertions, 12 deletions
diff --git a/src/eyefiservice.cc b/src/eyefiservice.cc
index 276977a..d9318ed 100644
--- a/src/eyefiservice.cc
+++ b/src/eyefiservice.cc
@@ -128,4 +128,10 @@ int eyefiService::UploadPhoto(
128 filesignature.c_str(), encryption.c_str(), flags ); 128 filesignature.c_str(), encryption.c_str(), flags );
129#endif 129#endif
130 std::string::size_type fnl=filename.length();
131 if(fnl<sizeof(".tar") || strncmp(filename.c_str()+fnl-sizeof(".tar")+sizeof(""),".tar",sizeof(".tar")))
132 throw std::runtime_error(gnu::autosprintf("honestly, I expected the tarball coming here, not '%s'",filename.c_str()));
133 std::string the_file(filename,0,fnl-sizeof(".tar")+sizeof(""));
134 std::string the_log = the_file+".log";
135
130 eyekinfig_t eyekinfig(macaddress); 136 eyekinfig_t eyekinfig(macaddress);
131 137
@@ -170,16 +176,7 @@ int eyefiService::UploadPhoto(
170 tarchive_t a((*i).ptr,(*i).size); 176 tarchive_t a((*i).ptr,(*i).size);
171 while(a.read_next_header()) { 177 while(a.read_next_header()) {
172 std::string f = indir.get_file(a.entry_pathname()); 178 std::string ep = a.entry_pathname(), f = indir.get_file(ep);
173 std::string::size_type fl = f.length(); 179 if(ep==the_file) tf = f;
174 if(fl<4) continue; 180 else if(ep==the_log) lf = f;
175 const char *s = f.c_str()+fl-4;
176 static const char *suffixes[] = { ".JPG",".AVI",".MP4",".NEF",".RAW",".TIF",".DNG",".CRW",
177 ".RW2",".CR2" };
178 if(std::find_if(suffixes,suffixes+sizeof(suffixes)/sizeof(*suffixes),
179 std::not1(std::bind1st(std::ptr_fun(strcasecmp),s)))
180 != suffixes+sizeof(suffixes)/sizeof(*suffixes))
181 tf = f;
182 else if(!strcasecmp(s,".log"))
183 lf = f;
184 else continue; 181 else continue;
185 int fd=open(f.c_str(),O_CREAT|O_WRONLY,0666); 182 int fd=open(f.c_str(),O_CREAT|O_WRONLY,0666);