[SCM] exiv2 packaging branch, master, updated. debian/0.25-3.1-3734-gdcbc29a

Maximiliano Curia maxy at moszumanska.debian.org
Thu Jul 13 17:43:19 UTC 2017


Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/exiv2.git;a=commitdiff;h=72af64e

The following commit has been merged in the master branch:
commit 72af64ee84e6693ae8be379a7d5d3c60b2869c27
Author: Robin Mills <robin at clanmills.com>
Date:   Sat Aug 18 03:10:34 2012 +0000

    image file list is sorted by image date.  Removed tabs in source.  Fixed linux infinite file recursion directory read.
---
 samples/geotag.cpp | 688 +++++++++++++++++++++++++++--------------------------
 1 file changed, 355 insertions(+), 333 deletions(-)

diff --git a/samples/geotag.cpp b/samples/geotag.cpp
index 3f7b1c0..3dbdc63 100644
--- a/samples/geotag.cpp
+++ b/samples/geotag.cpp
@@ -1,4 +1,5 @@
 // ***************************************************************** -*- C++ -*-
+
 // geotag.cpp, $Rev: 2286 $
 // Sample program to read gpx files and update the images with GPS tags
 
@@ -7,11 +8,14 @@
 #include <iostream>
 #include <iomanip>
 #include <cassert>
+#include <algorithm>
 
 #include <stdio.h>
-#include <sys/types.h>
+#include <stdlib.h>
 #include <time.h>
 #include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
 
 #include "expat.h"
 
@@ -31,7 +35,9 @@ using namespace std;
 
 #ifdef   _MSC_VER
 #include <windows.h>
-char* realpath(const char* file,char* path);
+char*    realpath(const char* file,char* path);
+#define  lstat _stat
+#define  stat  _stat
 #if      _MSC_VER < 1400
 #define strcpy_s(d,l,s) strcpy(d,s)
 #define strcat_s(d,l,s) strcat(d,s)
@@ -39,9 +45,9 @@ char* realpath(const char* file,char* path);
 
 #else
 #include <dirent.h>
-#include <unistd.h>	
+#include <unistd.h>     
 #include <sys/param.h>
-#define stricmp strcasecmp
+#define  stricmp strcasecmp
 #endif
 
 // prototypes
@@ -57,31 +63,31 @@ int    timeZoneAdjust();
 #ifdef   _MSC_VER
 char* realpath(const char* file,char* path)
 {
-	char* result = (char*) malloc(_MAX_PATH);
-	if   (result) GetFullPathName(file,_MAX_PATH,result,NULL);
-	return result ;
+    char* result = (char*) malloc(_MAX_PATH);
+    if   (result) GetFullPathName(file,_MAX_PATH,result,NULL);
+    return result ;
 }
 #endif
 
 // Command-line parser
 class Options  {
 public:
-	bool        verbose;
-	bool        help;
-	bool        version;
-	bool        dst;
-	bool        dryrun;
-
-	Options()
-	{
-		verbose     = false;
-		help        = false;
-		version     = false;
-		dst         = false;
-		dryrun      = false;
-	}
-
-	virtual ~Options() {} ;
+    bool        verbose;
+    bool        help;
+    bool        version;
+    bool        dst;
+    bool        dryrun;
+
+    Options()
+    {
+        verbose     = false;
+        help        = false;
+        version     = false;
+        dst         = false;
+        dryrun      = false;
+    }
+
+    virtual ~Options() {} ;
 } ;
 
 enum
@@ -121,101 +127,101 @@ enum
 class Position
 {
 public:
-	         Position(time_t time,double lat,double lon,double ele) : time_(time),lon_(lon),lat_(lat),ele_(ele) {};
-			 Position() { time_=0 ; lat_=0.0 ; lon_=0.0 ; ele_=0.0 ; };
+             Position(time_t time,double lat,double lon,double ele) : time_(time),lon_(lon),lat_(lat),ele_(ele) {};
+             Position() { time_=0 ; lat_=0.0 ; lon_=0.0 ; ele_=0.0 ; };
     virtual ~Position() {} ;
 //  copy constructor
-	Position(const Position& o) : time_(o.time_),lon_(o.lon_),lat_(o.lat_),ele_(o.ele_) {};
+    Position(const Position& o) : time_(o.time_),lon_(o.lon_),lat_(o.lat_),ele_(o.ele_) {};
 
 //  instance methods
-	bool good()                 { return time_ || lon_ || lat_ || ele_ ; }
-	std::string getTimeString() { if ( times_.empty() ) times_ = getExifTime(time_) ;  return times_; }
-	time_t      getTime()       { return time_ ; }
-	std::string toString();
+    bool good()                 { return time_ || lon_ || lat_ || ele_ ; }
+    std::string getTimeString() { if ( times_.empty() ) times_ = getExifTime(time_) ;  return times_; }
+    time_t      getTime()       { return time_ ; }
+    std::string toString();
 
 //  getters/setters
-	double lat()            {return lat_   ;}
-	double lon()            {return lon_   ;}
-	double ele()            {return ele_   ;}
-	int    delta()          {return delta_ ;}
-	void   delta(int delta) {delta_=delta  ;}
+    double lat()            {return lat_   ;}
+    double lon()            {return lon_   ;}
+    double ele()            {return ele_   ;}
+    int    delta()          {return delta_ ;}
+    void   delta(int delta) {delta_=delta  ;}
 
 //  data
 private:
-	time_t      time_;
-	double      lon_ ;
-	double      lat_ ;
-	double      ele_ ;
-	std::string times_;
-	int         delta_;
+    time_t      time_;
+    double      lon_ ;
+    double      lat_ ;
+    double      ele_ ;
+    std::string times_;
+    int         delta_;
 
 // public static data
 public:
-	static int    adjust_  ;
-	static int    tz_      ;
-	static int    dst_     ;
-	static time_t deltaMax_;
+    static int    adjust_  ;
+    static int    tz_      ;
+    static int    dst_     ;
+    static time_t deltaMax_;
 
 // public static member functions
 public:
-	static int    Adjust() {return Position::adjust_ + Position::tz_ + Position::dst_ ;}
-	static int    tz()     {return tz_    ;}
-	static int    dst()    {return dst_   ;}
-	static int    adjust() {return adjust_;}
-
-	static std::string toExifString(double d,bool bRational,bool bLat);
-	static std::string toExifString(double d);
-	static std::string toExifTimeStamp(std::string& t);
+    static int    Adjust() {return Position::adjust_ + Position::tz_ + Position::dst_ ;}
+    static int    tz()     {return tz_    ;}
+    static int    dst()    {return dst_   ;}
+    static int    adjust() {return adjust_;}
+
+    static std::string toExifString(double d,bool bRational,bool bLat);
+    static std::string toExifString(double d);
+    static std::string toExifTimeStamp(std::string& t);
 };
 
 std::string Position::toExifTimeStamp(std::string& t)
-{	
-	char        result[200];
-	const char* arg = t.c_str();
-	int HH = 0 ;
-	int mm = 0 ;
-	int SS = 0 ;
+{   
+    char        result[200];
+    const char* arg = t.c_str();
+    int HH = 0 ;
+    int mm = 0 ;
+    int SS = 0 ;
     if ( strstr(arg,":") || strstr(arg,"-") ) {
-		int  YY,MM,DD    ;
-		char a,b,c,d,e   ;
-		sscanf(arg,"%d%c%d%c%d%c%d%c%d%c%d",&YY,&a,&MM,&b,&DD,&c,&HH,&d,&mm,&e,&SS);
-	}
-	sprintf(result,"%d/1 %d/1 %d/1",HH,mm,SS);
-	return std::string(result);
+        int  YY,MM,DD    ;
+        char a,b,c,d,e   ;
+        sscanf(arg,"%d%c%d%c%d%c%d%c%d%c%d",&YY,&a,&MM,&b,&DD,&c,&HH,&d,&mm,&e,&SS);
+    }
+    sprintf(result,"%d/1 %d/1 %d/1",HH,mm,SS);
+    return std::string(result);
 }
 
 std::string Position::toExifString(double d)
 {
-	char result[200];
-	d *= 100;
-	sprintf(result,"%d/100",abs((int)d));
-	return std::string(result);
+    char result[200];
+    d *= 100;
+    sprintf(result,"%d/100",abs((int)d));
+    return std::string(result);
 }
 
 std::string Position::toExifString(double d,bool bRational,bool bLat)
 {
-	const char* NS= d>=0.0?"N":"S";
-	const char* EW= d>=0.0?"E":"W";
-	if ( d < 0 ) d = -d;
-	int deg = (int) d;
-		d  -= deg;
-		d  *= 60;
-	int min = (int) d ;
-		d  -= min;
-		d  *= 60;
-	int sec = (int)d;
-	char result[200];
-	sprintf(result,bRational ? "%d/1 %d/1 %d/1%s" : "%03d.%02d'%02d\"%s" ,deg,min,sec,bRational?"":bLat?EW:NS);
-	return std::string(result);
+    const char* NS= d>=0.0?"N":"S";
+    const char* EW= d>=0.0?"E":"W";
+    if ( d < 0 ) d = -d;
+    int deg = (int) d;
+        d  -= deg;
+        d  *= 60;
+    int min = (int) d ;
+        d  -= min;
+        d  *= 60;
+    int sec = (int)d;
+    char result[200];
+    sprintf(result,bRational ? "%d/1 %d/1 %d/1%s" : "%03d.%02d'%02d\"%s" ,deg,min,sec,bRational?"":bLat?EW:NS);
+    return std::string(result);
 }
 
 std::string Position::toString()
 {
-	char result[200];
-	std::string sLat = Position::toExifString(lat_,false,true );
-	std::string sLon = Position::toExifString(lon_,false,false);
-	sprintf(result,"%s %s %-8.3f",sLon.c_str(),sLat.c_str(),ele_);
-	return std::string(result);
+    char result[200];
+    std::string sLat = Position::toExifString(lat_,false,true );
+    std::string sLon = Position::toExifString(lon_,false,false);
+    sprintf(result,"%s %s %-8.3f",sLon.c_str(),sLat.c_str(),ele_);
+    return std::string(result);
 }
 
 int    Position::adjust_   = 0;
@@ -235,24 +241,24 @@ strings_t    gFiles;
 class UserData
 {
 public:
-	UserData(Options& options) : indent(0),count(0),nTrkpt(0),bTime(false),bEle(false),options_(options) {};
+    UserData(Options& options) : indent(0),count(0),nTrkpt(0),bTime(false),bEle(false),options_(options) {};
     virtual ~UserData() {} ;
 
 //  public data members
     int         indent;
     size_t      count ;
-	Position    now ;
-	Position    prev;
+    Position    now ;
+    Position    prev;
     int         nTrkpt;
     bool        bTime ;
     bool        bEle  ;
     double      ele;
     double      lat;
     double      lon;
-	std::string xmlt;
-	std::string exift;
+    std::string xmlt;
+    std::string exift;
     time_t      time;
-	Options&    options_;
+    Options&    options_;
 // static public data memembers
 };
 
@@ -286,29 +292,29 @@ static void endElement(void* userData, const char* name)
     if ( strcmp(name,"trkpt")==0 ) {
 
         me->nTrkpt--;
-		me->now = Position(me->time,me->lat,me->lon,me->ele) ;
+        me->now = Position(me->time,me->lat,me->lon,me->ele) ;
 
-		if ( !me->prev.good() && me->options_.verbose ) {
-			printf("trkseg %s begin ",me->now.getTimeString().c_str());
-		}
+        if ( !me->prev.good() && me->options_.verbose ) {
+            printf("trkseg %s begin ",me->now.getTimeString().c_str());
+        }
 
-		// printf("lat,lon = %f,%f ele = %f xml = %s exif = %s
",me->lat,me->lon,me->ele,me->xmlt.c_str(),me->exift.c_str());
+        // printf("lat,lon = %f,%f ele = %f xml = %s exif = %s
",me->lat,me->lon,me->ele,me->xmlt.c_str(),me->exift.c_str());
 
-		// if we have a good previous position
-		// add missed entries to timedict
-		//if ( me->prev.good() && (me->now.getTime() - me->prev.getTime()) < Position::timeDiffMax ) {
-		//	time_t missed = me->prev.getTime() ;
-		//	while ( ++missed < me->now.getTime() )
-		//		gTimeDict[missed] = me->prev ; // Position(missed,me->lat,me->lon,me->ele) ;
-		//}
+        // if we have a good previous position
+        // add missed entries to timedict
+        //if ( me->prev.good() && (me->now.getTime() - me->prev.getTime()) < Position::timeDiffMax ) {
+        //  time_t missed = me->prev.getTime() ;
+        //  while ( ++missed < me->now.getTime() )
+        //      gTimeDict[missed] = me->prev ; // Position(missed,me->lat,me->lon,me->ele) ;
+        //}
 
-		// remember our location and put it in gTimeDict
-		gTimeDict[me->time] = me->now ;
-		me->prev = me->now ;
+        // remember our location and put it in gTimeDict
+        gTimeDict[me->time] = me->now ;
+        me->prev = me->now ;
+    }
+    if ( strcmp(name,"trkseg")==0 && me->options_.verbose ) {
+        printf("%s end
",me->now.getTimeString().c_str());
     }
-	if ( strcmp(name,"trkseg")==0 && me->options_.verbose ) {
-		printf("%s end
",me->now.getTimeString().c_str());
-	}
 }
 
 void charHandler(void* userData,const char* s,int len)
@@ -325,9 +331,9 @@ void charHandler(void* userData,const char* s,int len)
                 buffer[len]=0;
                 char* b = buffer ;
                 while ( *b == ' ' && b < buffer+len ) b++ ;
-				me->xmlt  = b ;
+                me->xmlt  = b ;
                 me->time  = parseTime(me->xmlt.c_str());
-				me->exift = getExifTime(me->time);
+                me->exift = getExifTime(me->time);
             }
             me->bTime=false;
         }
@@ -378,10 +384,10 @@ time_t parseTime(const char* arg,bool bAdjust)
             long tm_gmtoff; /* offset from UTC in seconds */
     #endif
             memset(&T,0,sizeof(T));
-			T.tm_min  = mm  ;
+            T.tm_min  = mm  ;
             T.tm_hour = HH  ;
             T.tm_sec  = SS  ;
-			if ( bAdjust ) T.tm_sec -= Position::Adjust();
+            if ( bAdjust ) T.tm_sec -= Position::Adjust();
             T.tm_year = YY -1900 ;
             T.tm_mon  = MM -1    ;
             T.tm_mday = DD  ;
@@ -410,33 +416,33 @@ int timeZoneAdjust()
 #endif
 
 #if 0
-	// debugging code
-	struct tm utc = *gmtime(&now);
-	printf("utc  :  offset = %6d dst = %d time = %s", 0     ,utc  .tm_isdst, asctime(&utc  ));
-	printf("local:  offset = %6d dst = %d time = %s", offset,local.tm_isdst, asctime(&local));
-	printf("timeZoneAdjust = %6d
",offset);
+    // debugging code
+    struct tm utc = *gmtime(&now);
+    printf("utc  :  offset = %6d dst = %d time = %s", 0     ,utc  .tm_isdst, asctime(&utc  ));
+    printf("local:  offset = %6d dst = %d time = %s", offset,local.tm_isdst, asctime(&local));
+    printf("timeZoneAdjust = %6d
",offset);
 #endif
     return offset ;
 }
 
 string getExifTime(const time_t t)
 {
-	static char result[100];
-	strftime(result,sizeof(result),"%Y-%m-%d %H:%M:%S",localtime(&t));
-	return result ;
+    static char result[100];
+    strftime(result,sizeof(result),"%Y-%m-%d %H:%M:%S",localtime(&t));
+    return result ;
 }
 
 std::string makePath(std::string dir,std::string file)
 {
-	return dir + std::string(EXV_SEPERATOR_STR) + file ;
+    return dir + std::string(EXV_SEPERATOR_STR) + file ;
 }
 
 const char* makePath(const char* dir,const char* file)
 {
-	static char result[_MAX_PATH] ;
-	std::string r = makePath(std::string(dir),std::string(file));
-	strcpy(result,r.c_str());
-	return result;
+    static char result[_MAX_PATH] ;
+    std::string r = makePath(std::string(dir),std::string(file));
+    strcpy(result,r.c_str());
+    return result;
 }
 
 // file utilities
@@ -468,10 +474,10 @@ bool readDir(const char* path,Options& options)
                 }
                 else
                 {
-					std::string pathName = makePath(path,std::string(ffd.cFileName));
-					if ( getFileType(pathName,options) == typeImage ) {
-						gFiles.push_back( pathName );
-					}
+                    std::string pathName = makePath(path,std::string(ffd.cFileName));
+                    if ( getFileType(pathName,options) == typeImage ) {
+                        gFiles.push_back( pathName );
+                    }
                 }
                 bGo = FindNextFile(hFind, &ffd) != 0;
             }
@@ -488,10 +494,16 @@ bool readDir(const char* path,Options& options)
         // print all the files and directories within directory
         while ((ent = readdir (dir)) != NULL)
         {
-			std::string pathName = makePath(path,ent->d_name);
-			if ( getFileType(pathName,options) == typeImage ) {
-				gFiles.push_back( pathName );
-			}
+            std::string pathName = makePath(path,ent->d_name);
+            struct stat  buf     ;
+            lstat(path, &buf );
+            if ( ent->d_name[0] != '.' ) { 
+
+                // printf("reading %s => %s
",ent->d_name,pathName.c_str());
+                if ( getFileType(pathName,options) == typeImage ) {
+                    gFiles.push_back( pathName );
+                }
+            }
         }
         closedir (dir);
     }
@@ -501,9 +513,9 @@ bool readDir(const char* path,Options& options)
 
 inline size_t sip(FILE* f,char* buffer,size_t max_len,size_t len)
 {
-	while ( !feof(f) && len < max_len && buffer[len-1] != '>')
-		buffer[len++] = fgetc(f);
-	return len;
+    while ( !feof(f) && len < max_len && buffer[len-1] != '>')
+        buffer[len++] = fgetc(f);
+    return len;
 }
 
 bool readXML(const char* path,Options& options)
@@ -526,14 +538,14 @@ bool readXML(const char* path,Options& options)
 
         // swallow it
         if ( bResult ) {
-			len = sip(f,buffer,sizeof buffer,len);
+            len = sip(f,buffer,sizeof buffer,len);
             bResult = XML_Parse(parser, buffer,(int)len, len == 0 ) == XML_STATUS_OK;
         }
 
         // drink the rest of the file
         while ( bResult && len != 0 ) {
             len = fread(buffer,1,sizeof(buffer)-100,f);
-			len = sip(f,buffer,sizeof buffer,len);
+            len = sip(f,buffer,sizeof buffer,len);
             bResult = XML_Parse(parser, buffer,(int)len, len == 0 ) == XML_STATUS_OK;
         };
     }
@@ -560,7 +572,7 @@ bool readImage(const char* path,Options& /* options */)
     return bResult ;
 }
 
-time_t readImageTime(const char* path,std::string* pS=NULL)
+time_t readImageTime(std::string path,std::string* pS=NULL)
 {
     using namespace Exiv2;
 
@@ -581,8 +593,8 @@ time_t readImageTime(const char* path,std::string* pS=NULL)
                 image->readMetadata();
                 ExifData &exifData = image->exifData();
             //  printf("%s => %s
",(ds-1), exifData[ds-1].toString().c_str());
-				result = parseTime(exifData[ds-1].toString().c_str(),true);
-				if ( result && pS ) *pS = exifData[ds-1].toString();
+                result = parseTime(exifData[ds-1].toString().c_str(),true);
+                if ( result && pS ) *pS = exifData[ds-1].toString();
             }
         } catch ( ... ) {};
     }
@@ -591,16 +603,16 @@ time_t readImageTime(const char* path,std::string* pS=NULL)
 
 bool sina(const char* s,const char** a)
 {
-	bool bResult = false ;
-	int i = 0 ;
-	while ( *s == '-' ) s++;
-	while ( !bResult && a[i]) {
-		const char* A = a[i] ;
-		while ( *A == '-' ) A++ ;
-		bResult = stricmp(s,A)==0;
-		i++;
-	}
-	return bResult;
+    bool bResult = false ;
+    int i = 0 ;
+    while ( *s == '-' ) s++;
+    while ( !bResult && a[i]) {
+        const char* A = a[i] ;
+        while ( *A == '-' ) A++ ;
+        bResult = stricmp(s,A)==0;
+        i++;
+    }
+    return bResult;
 }
 
 int readFile(const char* path,Options /* options */)
@@ -608,13 +620,13 @@ int readFile(const char* path,Options /* options */)
     FILE* f     = fopen(path,"r");
     int nResult = f ? typeFile : typeUnknown;
     if (  f ) {
-		const char* docs[] = { ".doc",".txt", nil };
-		const char* code[] = { ".cpp",".h"  ,".pl" ,".py" ,".pyc", nil };
-		const char*  ext   = strstr(path,".");
-		if  ( ext ) {
-			if ( sina(ext,docs) ) nResult = typeDoc;
-			if ( sina(ext,code) ) nResult = typeCode;
-		}
+        const char* docs[] = { ".doc",".txt", nil };
+        const char* code[] = { ".cpp",".h"  ,".pl" ,".py" ,".pyc", nil };
+        const char*  ext   = strstr(path,".");
+        if  ( ext ) {
+            if ( sina(ext,docs) ) nResult = typeDoc;
+            if ( sina(ext,code) ) nResult = typeCode;
+        }
     }
     if ( f ) fclose(f) ;
 
@@ -623,17 +635,17 @@ int readFile(const char* path,Options /* options */)
 
 Position* searchTimeDict(TimeDict_t& td, const time_t& time,long long delta)
 {
-	Position* result = NULL;
-	for ( int t = 0 ; !result && t < delta ; t++ ) {
-		for ( int x = 0 ; !result && x < 2 ; x++ ) {
-			int T = t * ((x==0)?-1:1);
-			if ( td.count(time+T) ) {
-				result = &td[time+T];
-				result->delta(T);
-			}
-		}
-	}
-	return result;
+    Position* result = NULL;
+    for ( int t = 0 ; !result && t < delta ; t++ ) {
+        for ( int x = 0 ; !result && x < 2 ; x++ ) {
+            int T = t * ((x==0)?-1:1);
+            if ( td.count(time+T) ) {
+                result = &td[time+T];
+                result->delta(T);
+            }
+        }
+    }
+    return result;
 }
 
 int getFileType(std::string& path,Options& options) { return getFileType(path.c_str(),options); }
@@ -648,209 +660,219 @@ int getFileType(const char* path,Options& options)
 
 int version(const char* program)
 {
-	printf("%s: %s %s
",program,__DATE__,__TIME__);
-	return 0;
+    printf("%s: %s %s
",program,__DATE__,__TIME__);
+    return 0;
 }
 
 int help(const char* program,char const* words[],int nWords,bool /*bVerbose*/)
 {
-	printf("usage: %s ",program);
-	for ( int i = 0 ; i < nWords ; i++ ) {
-		if ( words[i] )
-			printf("%c-%s%s",i?'|':'{',words[i],i>(-kwNOVALUE)?" value":"");
-	}
-	printf("} path+
");
-	return 0;
+    printf("usage: %s ",program);
+    for ( int i = 0 ; i < nWords ; i++ ) {
+        if ( words[i] )
+            printf("%c-%s%s",i?'|':'{',words[i],i>(-kwNOVALUE)?" value":"");
+    }
+    printf("} path+
");
+    return 0;
 }
 
 int compare(const char* a,const char* b)
 {
-	int result=*a && *b;
-	while ( result && *a && *b) {
-		char A=*a++;
-		char B=*b++;
-		result=tolower(A)==tolower(B);
-	}
-	return result;
+    int result=*a && *b;
+    while ( result && *a && *b) {
+        char A=*a++;
+        char B=*b++;
+        result=tolower(A)==tolower(B);
+    }
+    return result;
 }
 
 int find(const char* arg,char const* words[],int nWords)
 {
-	int result=0;
+    if ( arg[0] != '-' ) return kwSYNTAX;
+    
+    int result=0;
     int count =0;
 
-	for ( int i = 0 ; i < nWords ; i++) {
-		int j = 0 ;
-		while ( arg[j] == '-' ) j++;
-		if ( ::compare(arg+j,words[i]) ) {
-			result = i ;
-			count++;
-		}
-	}
+    for ( int i = 0 ; i < nWords ; i++) {
+        int j = 0 ;
+        while ( arg[j] == '-' ) j++;
+        if ( ::compare(arg+j,words[i]) ) {
+            result = i ;
+            count++;
+        }
+    }
 
-	return count==1?result:kwSYNTAX;
+    return count==1?result:kwSYNTAX;
 }
 
 int parseTZ(const char* adjust)
 {
-	int   h=0;
-	int   m=0;
-	char  c  ;
-	try {
-		sscanf(adjust,"%d%c%d",&h,&c,&m);
-	} catch ( ... ) {} ;
-
-	return (3600*h)+(60*m);
+    int   h=0;
+    int   m=0;
+    char  c  ;
+    try {
+        sscanf(adjust,"%d%c%d",&h,&c,&m);
+    } catch ( ... ) {} ;
+
+    return (3600*h)+(60*m);
+}
+
+bool mySort(std::string a,std::string b)
+{
+    time_t A = readImageTime(a);
+    time_t B = readImageTime(b);
+    return (A<B);
 }
 
 int main(int argc,const char* argv[])
 {
-	int result=0;
-	const char* program = argv[0];
+    int result=0;
+    const char* program = argv[0];
 
-	const char* types[typeMax];
+    const char* types[typeMax];
     types[typeUnknown  ] = "unknown";
     types[typeDirectory] = "directory";
     types[typeImage    ] = "image";
     types[typeXML      ] = "xml";
-	types[typeDoc      ] = "doc";
-	types[typeCode     ] = "code";
+    types[typeDoc      ] = "doc";
+    types[typeCode     ] = "code";
     types[typeFile     ] = "file";
 
-	char const* keywords[kwMAX];
-	memset(keywords,0,sizeof(keywords));
-	keywords[kwHELP    ] = "help";
-	keywords[kwVERSION ] = "version";
-	keywords[kwVERBOSE ] = "verbose";
-	keywords[kwDRYRUN  ] = "dryrun";
-	keywords[kwDST     ] = "dst";
-	keywords[kwADJUST  ] = "adjust";
-	keywords[kwTZ      ] = "tz";
-	keywords[kwDELTA   ] = "delta";
-
-	map<std::string,string> shorts;
-	shorts["-?"] = "-help";
-	shorts["-h"] = "-help";
-	shorts["-v"] = "-verbose";
-	shorts["-V"] = "-version";
-	shorts["-d"] = "-dst";
-	shorts["-a"] = "-adjust";
-	shorts["-t"] = "-tz";
-	shorts["-D"] = "-delta";
-	shorts["-s"] = "-delta";
-	shorts["-X"] = "-dryrun";
+    char const* keywords[kwMAX];
+    memset(keywords,0,sizeof(keywords));
+    keywords[kwHELP    ] = "help";
+    keywords[kwVERSION ] = "version";
+    keywords[kwVERBOSE ] = "verbose";
+    keywords[kwDRYRUN  ] = "dryrun";
+    keywords[kwDST     ] = "dst";
+    keywords[kwADJUST  ] = "adjust";
+    keywords[kwTZ      ] = "tz";
+    keywords[kwDELTA   ] = "delta";
+
+    map<std::string,string> shorts;
+    shorts["-?"] = "-help";
+    shorts["-h"] = "-help";
+    shorts["-v"] = "-verbose";
+    shorts["-V"] = "-version";
+    shorts["-d"] = "-dst";
+    shorts["-a"] = "-adjust";
+    shorts["-t"] = "-tz";
+    shorts["-D"] = "-delta";
+    shorts["-s"] = "-delta";
+    shorts["-X"] = "-dryrun";
 
     Options options ;
-	options.help    = sina(keywords[kwHELP   ],argv) || argc < 2;
-	options.verbose = sina(keywords[kwVERBOSE],argv);
-	options.dryrun  = sina(keywords[kwDRYRUN ],argv);
-	options.version = sina(keywords[kwVERSION],argv);
-	options.dst     = sina(keywords[kwDST    ],argv);
-	options.dryrun  = sina(keywords[kwDRYRUN ],argv);
+    options.help    = sina(keywords[kwHELP   ],argv) || argc < 2;
+    options.verbose = sina(keywords[kwVERBOSE],argv);
+    options.dryrun  = sina(keywords[kwDRYRUN ],argv);
+    options.version = sina(keywords[kwVERSION],argv);
+    options.dst     = sina(keywords[kwDST    ],argv);
+    options.dryrun  = sina(keywords[kwDRYRUN ],argv);
 
     for ( int i = 1 ; !result && i < argc ; i++ ) {
         const char* arg   = argv[i++];
-		if ( shorts.count(arg) ) arg = shorts[arg].c_str();
+        if ( shorts.count(arg) ) arg = shorts[arg].c_str();
 
-		const char* value = argv[i  ];
-		int        ivalue = ::atoi(value?value:"0");
-		int         key   = ::find(arg,keywords,kwMAX);
+        const char* value = argv[i  ];
+        int        ivalue = ::atoi(value?value:"0");
+        int         key   = ::find(arg,keywords,kwMAX);
         int         needv = key < kwMAX && key > (-kwNOVALUE);
 
         if (!needv ) i--;
         if ( needv && !value) key = kwNEEDVALUE;
 
         switch ( key ) {
-			case kwDST      : options.dst     = true ; break ;
-			case kwHELP     : options.help    = true ; break ;
-			case kwVERSION  : options.version = true ; break;
-			case kwDRYRUN   : options.dryrun  = true ; break ;
-			case kwVERBOSE  : options.verbose = true ; break;
-			case kwTZ       : Position::tz_      = parseTZ(value);break;
-			case kwADJUST   : Position::adjust_  = ivalue;break;
-			case kwDELTA    : Position::deltaMax_= ivalue;break;
+            case kwDST      : options.dst     = true ; break;
+            case kwHELP     : options.help    = true ; break;
+            case kwVERSION  : options.version = true ; break;
+            case kwDRYRUN   : options.dryrun  = true ; break;
+            case kwVERBOSE  : options.verbose = true ; break;
+            case kwTZ       : Position::tz_      = parseTZ(value);break;
+            case kwADJUST   : Position::adjust_  = ivalue;break;
+            case kwDELTA    : Position::deltaMax_= ivalue;break;
             case kwNEEDVALUE: fprintf(stderr,"error: %s requires a value
",arg); result = resultSyntaxError ; break ;
-	        case kwSYNTAX   : default:
-			{
-				int  type   = getFileType(arg,options) ;
-				if ( options.verbose ) printf("%s %s ",arg,types[type]) ;
-				if ( type == typeImage ) {
-					time_t t    = readImageTime(arg) ;
-					char*  path = realpath(arg,NULL);
-					if  ( t && path ) {
-						if ( options.verbose) printf("%s %ld %s",path,(long int)t,asctime(localtime(&t)));
-						gFiles.push_back(path);
-					}
-					if ( path ) :: free((void*) path);
-				}
-				if ( type == typeUnknown ) {
-					fprintf(stderr,"error: illegal syntax %s
",arg);
-					result = resultSyntaxError ; 
-				}
-				if ( options.verbose ) printf("
") ;
-			}break;
-		}
-	}
-
-	if ( options.help    ) ::help(program,keywords,kwMAX,options.verbose);
-	if ( options.version ) ::version(program);
-
-	if ( !result ) {
-		if ( options.dst ) Position::dst_ = 3600;
-		if ( options.verbose ) {
-			int t = Position::tz();
-			int d = Position::dst();
-			int a = Position::adjust();
-			int A = Position::Adjust();
-			int s = A     ;
-			int h = s/3600;
-			    s-= h*3600;
-				s = abs(s);
-			int m = s/60  ;
-			    s-= m*60  ;
-			printf("tz,dsl,adjust = %d,%d,%d total = %dsecs (= %d:%d:%d)
",t,d,a,A,h,m,s);
-		}
-		for ( size_t p = 0 ; !options.dryrun && p < gFiles.size() ; p++ ) {
-			const char* arg = gFiles[p].c_str() ;
-			std::string stamp ;
-			time_t t    = readImageTime(arg,&stamp) ;
-			Position* pPos = searchTimeDict(gTimeDict,t,Position::deltaMax_);
-			if ( pPos ) {
-				try {
-					Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(gFiles[p]);
-					if ( image.get() ) {
-						image->readMetadata();
-						Exiv2::ExifData &exifData = image->exifData();
-
-					//	delete exifData["Exif.GPSInfo.GPSProcessingMethod" ];
-						exifData.erase(exifData.findKey(Exiv2::ExifKey("Exif.GPSInfo.GPSProcessingMethod")));
-						exifData.erase(exifData.findKey(Exiv2::ExifKey("Exif.GPSInfo.GPSAltitudeRef")));
-						exifData.erase(exifData.findKey(Exiv2::ExifKey("Exif.GPSInfo.GPSVersionID")));
-
-						exifData["Exif.GPSInfo.GPSProcessingMethod" ] = "65 83 67 73 73 0 0 0 72 89 66 82 73 68 45 70 73 88"; // ASCII HYBRID-FIX
-						exifData["Exif.GPSInfo.GPSVersionID"		] = "2 2 0 0";
-						exifData["Exif.GPSInfo.GPSMapDatum"			] = "WGS-84";
-
-						exifData["Exif.GPSInfo.GPSLatitude"			] = Position::toExifString(pPos->lat(),true,true);
-						exifData["Exif.GPSInfo.GPSLongitude"		] = Position::toExifString(pPos->lon(),true,false);
-						exifData["Exif.GPSInfo.GPSAltitude"			] = Position::toExifString(pPos->ele());
-						
-						exifData["Exif.GPSInfo.GPSAltitudeRef"		] = pPos->ele()<0.0?"1":"0";
-						exifData["Exif.GPSInfo.GPSLatitudeRef"		] = std::string(pPos->lat()>0?"E":"W");
-						exifData["Exif.GPSInfo.GPSLongitudeRef"		] = std::string(pPos->lat()>0?"S":"N");
-
-						exifData["Exif.GPSInfo.GPSDateStamp"		] = stamp;
-						exifData["Exif.GPSInfo.GPSTimeStamp"		] = Position::toExifTimeStamp(stamp);
-
-						image->writeMetadata();
-					}
-				} catch ( ... ) {};
-				printf("%s %s % 2d
",arg,pPos->toString().c_str(),pPos->delta());
-			} else {
-				printf("%s *** not in time dict ***
",arg);
-			}
-		}
-	}
+            case kwSYNTAX   : default:
+            {
+                int  type   = getFileType(arg,options) ;
+                if ( options.verbose ) printf("%s %s ",arg,types[type]) ;
+                if ( type == typeImage ) {
+                    time_t t    = readImageTime(std::string(arg)) ;
+                    char*  path = realpath(arg,NULL);
+                    if  ( t && path ) {
+                        if ( options.verbose) printf("%s %ld %s",path,(long int)t,asctime(localtime(&t)));
+                        gFiles.push_back(path);
+                    }
+                    if ( path ) :: free((void*) path);
+                }
+                if ( type == typeUnknown ) {
+                    fprintf(stderr,"error: illegal syntax %s
",arg);
+                    result = resultSyntaxError ; 
+                }
+                if ( options.verbose ) printf("
") ;
+            }break;
+        }
+    }
+
+    if ( options.help    ) ::help(program,keywords,kwMAX,options.verbose);
+    if ( options.version ) ::version(program);
+
+    if ( !result ) {
+        sort(gFiles.begin(),gFiles.end(),mySort);
+        if ( options.dst ) Position::dst_ = 3600;
+        if ( options.verbose ) {
+            int t = Position::tz();
+            int d = Position::dst();
+            int a = Position::adjust();
+            int A = Position::Adjust();
+            int s = A     ;
+            int h = s/3600;
+                s-= h*3600;
+                s = abs(s);
+            int m = s/60  ;
+                s-= m*60  ;
+            printf("tz,dsl,adjust = %d,%d,%d total = %dsecs (= %d:%d:%d)
",t,d,a,A,h,m,s);
+        }
+        for ( size_t p = 0 ; !options.dryrun && p < gFiles.size() ; p++ ) {
+            std::string arg = gFiles[p] ;
+            std::string stamp ;
+            time_t t    = readImageTime(arg,&stamp) ;
+            Position* pPos = searchTimeDict(gTimeDict,t,Position::deltaMax_);
+            if ( pPos ) {
+                try {
+                    Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(gFiles[p]);
+                    if ( image.get() ) {
+                        image->readMetadata();
+                        Exiv2::ExifData &exifData = image->exifData();
+
+                    //  delete exifData["Exif.GPSInfo.GPSProcessingMethod" ];
+                        exifData.erase(exifData.findKey(Exiv2::ExifKey("Exif.GPSInfo.GPSProcessingMethod")));
+                        exifData.erase(exifData.findKey(Exiv2::ExifKey("Exif.GPSInfo.GPSAltitudeRef")));
+                        exifData.erase(exifData.findKey(Exiv2::ExifKey("Exif.GPSInfo.GPSVersionID")));
+
+                        exifData["Exif.GPSInfo.GPSProcessingMethod" ] = "65 83 67 73 73 0 0 0 72 89 66 82 73 68 45 70 73 88"; // ASCII HYBRID-FIX
+                        exifData["Exif.GPSInfo.GPSVersionID"        ] = "2 2 0 0";
+                        exifData["Exif.GPSInfo.GPSMapDatum"         ] = "WGS-84";
+
+                        exifData["Exif.GPSInfo.GPSLatitude"         ] = Position::toExifString(pPos->lat(),true,true);
+                        exifData["Exif.GPSInfo.GPSLongitude"        ] = Position::toExifString(pPos->lon(),true,false);
+                        exifData["Exif.GPSInfo.GPSAltitude"         ] = Position::toExifString(pPos->ele());
+                        
+                        exifData["Exif.GPSInfo.GPSAltitudeRef"      ] = pPos->ele()<0.0?"1":"0";
+                        exifData["Exif.GPSInfo.GPSLatitudeRef"      ] = std::string(pPos->lat()>0?"E":"W");
+                        exifData["Exif.GPSInfo.GPSLongitudeRef"     ] = std::string(pPos->lat()>0?"S":"N");
+
+                        exifData["Exif.GPSInfo.GPSDateStamp"        ] = stamp;
+                        exifData["Exif.GPSInfo.GPSTimeStamp"        ] = Position::toExifTimeStamp(stamp);
+
+                        image->writeMetadata();
+                    }
+                } catch ( ... ) {};
+                printf("%s %s % 2d
",arg.c_str(),pPos->toString().c_str(),pPos->delta());
+            } else {
+                printf("%s *** not in time dict ***
",arg.c_str());
+            }
+        }
+    }
 
     return result ;
-}
+}
\ No newline at end of file

-- 
exiv2 packaging



More information about the pkg-kde-commits mailing list