You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(22) |
Sep
(57) |
Oct
(39) |
Nov
(93) |
Dec
(72) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(15) |
Feb
(8) |
Mar
(12) |
Apr
(25) |
May
(2) |
Jun
|
Jul
(11) |
Aug
(32) |
Sep
(18) |
Oct
(53) |
Nov
|
Dec
(11) |
2004 |
Jan
(19) |
Feb
(1) |
Mar
(15) |
Apr
(17) |
May
(56) |
Jun
(19) |
Jul
(6) |
Aug
(16) |
Sep
(44) |
Oct
(31) |
Nov
(36) |
Dec
(13) |
2005 |
Jan
(2) |
Feb
(41) |
Mar
(304) |
Apr
(176) |
May
(19) |
Jun
(33) |
Jul
(14) |
Aug
(21) |
Sep
(4) |
Oct
(3) |
Nov
|
Dec
(8) |
2006 |
Jan
(18) |
Feb
(9) |
Mar
(5) |
Apr
(2) |
May
(2) |
Jun
(4) |
Jul
(2) |
Aug
|
Sep
(7) |
Oct
(10) |
Nov
|
Dec
|
2007 |
Jan
|
Feb
(3) |
Mar
(1) |
Apr
(4) |
May
(124) |
Jun
(59) |
Jul
(1) |
Aug
(13) |
Sep
(3) |
Oct
(11) |
Nov
(30) |
Dec
(35) |
2008 |
Jan
(31) |
Feb
(42) |
Mar
(4) |
Apr
(5) |
May
(2) |
Jun
(12) |
Jul
(8) |
Aug
(2) |
Sep
(4) |
Oct
(5) |
Nov
(89) |
Dec
(23) |
2009 |
Jan
(71) |
Feb
(5) |
Mar
(8) |
Apr
(7) |
May
(8) |
Jun
(7) |
Jul
|
Aug
(4) |
Sep
(58) |
Oct
(74) |
Nov
(53) |
Dec
(32) |
2010 |
Jan
(8) |
Feb
(13) |
Mar
(4) |
Apr
|
May
|
Jun
(10) |
Jul
(1) |
Aug
(2) |
Sep
(12) |
Oct
(17) |
Nov
(2) |
Dec
(24) |
2011 |
Jan
(2) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2012 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(24) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2013 |
Jan
|
Feb
(20) |
Mar
(18) |
Apr
|
May
|
Jun
|
Jul
(5) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
(2) |
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2016 |
Jan
|
Feb
|
Mar
|
Apr
(4) |
May
|
Jun
|
Jul
|
Aug
|
Sep
(12) |
Oct
|
Nov
|
Dec
|
2017 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(8) |
Jun
|
Jul
(7) |
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
(5) |
From: Jan P. <pa...@us...> - 2004-03-01 12:17:29
|
Update of /cvsroot/libexif/libexif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19341 Modified Files: ChangeLog Log Message: * libexif/pentax/exif-mnote-data-pentax.c: Fixed flipped inequation causing all value requests to be denied as invalid Index: ChangeLog =================================================================== RCS file: /cvsroot/libexif/libexif/ChangeLog,v retrieving revision 1.95 retrieving revision 1.96 diff -u -d -r1.95 -r1.96 --- ChangeLog 2 Feb 2004 15:39:37 -0000 1.95 +++ ChangeLog 1 Mar 2004 11:58:34 -0000 1.96 @@ -1,3 +1,8 @@ +2004-03-01 Jan Patera <pa...@us...> + + * libexif/pentax/exif-mnote-data-pentax.c: Fixed flipped inequation + causing all value requests to be denied as invalid + 2004-02-02 Jan Patera <pa...@us...> * libexif/exif-loader.c: propper skipping of JPEG_MARKER_COM when |
From: Jan P. <pa...@us...> - 2004-03-01 12:15:30
|
Update of /cvsroot/libexif/libexif/libexif/pentax In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18877 Modified Files: exif-mnote-data-pentax.c Log Message: exif_mnote_data_pentax_get_value: Fixed flipped inequation causing all value requests to be denied as invalid Index: exif-mnote-data-pentax.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/pentax/exif-mnote-data-pentax.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- exif-mnote-data-pentax.c 7 Jan 2004 15:01:39 -0000 1.4 +++ exif-mnote-data-pentax.c 1 Mar 2004 11:56:37 -0000 1.5 @@ -63,7 +63,7 @@ ExifMnoteDataPentax *n = (ExifMnoteDataPentax *) d; if (!n) return NULL; - if (n->count >= i) return NULL; + if (n->count <= i) return NULL; return mnote_pentax_entry_get_value (&n->entries[i], val, maxlen); } |
From: Jan P. <pa...@us...> - 2004-02-04 05:34:40
|
Update of /cvsroot/libexif/exif/exif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2578/exif Modified Files: main.c Log Message: 2004-02-03 Jan Patera <pa...@us...> Suggestion by Sebastian Wilhelmi <se...@se...>: * exif/main.c: Proper size calculation of ascii items. Index: main.c =================================================================== RCS file: /cvsroot/libexif/exif/exif/main.c,v retrieving revision 1.37 retrieving revision 1.38 diff -u -d -r1.37 -r1.38 --- main.c 30 Sep 2003 22:43:00 -0000 1.37 +++ main.c 3 Feb 2004 18:32:22 -0000 1.38 @@ -109,9 +109,9 @@ */ if (e->format == EXIF_FORMAT_ASCII) { if (e->data) free (e->data); - e->components = strlen (e->data) + 1; - e->size = strlen (set_value) + 1; - e->data = malloc (sizeof (char) * e->size); + e->components = strlen (set_value) + 1; + e->size = sizeof (char) * e->components; + e->data = malloc (e->size); if (!e->data) { fprintf (stderr, _("Not enough memory.")); fputc ('\n', stderr); |
From: Lutz M?l. <lu...@us...> - 2004-01-19 21:49:53
|
Update of /cvsroot/libexif/libexif/contrib/c++ In directory sc8-pr-cvs1:/tmp/cvs-serv7833/contrib/c++ Added Files: Makefile exif.hxx exif_module.cxx Log Message: 2004-01-19 Lutz Mueller <lu...@us...> * contrib/c++: Files contributed by Hans Meine <han...@gm...>. Completely untested. --- NEW FILE: exif_module.cxx --- /* exif-content.c * * Copyright 2002,2003 Hans Meine <han...@gm...> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include "exif.hxx" #include <string> #include <iostream> #include <Python.h> #include <boost/python.hpp> using namespace boost::python; template<class Wrapper, class Pointer> struct WrappedObjectIterator { //typedef Wrapper value_type; Pointer *it_, *end_; WrappedObjectIterator(Pointer *it, Pointer *end) : it_(it), end_(end) {} Wrapper next() { if(it_ == end_) { PyErr_SetString(PyExc_StopIteration, "iterator exhausted"); throw_error_already_set(); } return Wrapper(*it_++); } }; struct PythonEntry : public Exif::Entry { PythonEntry() {} PythonEntry(Exif::Entry const &other) : Exif::Entry(other) {} object component(long index) const { switch(format()) { case EXIF_FORMAT_BYTE: return object(getByte(index)); case EXIF_FORMAT_SHORT: return object(getShort(index)); case EXIF_FORMAT_LONG: return object(getLong(index)); case EXIF_FORMAT_SLONG: return object(getSLong(index)); case EXIF_FORMAT_RATIONAL: return object(getRational(index)); case EXIF_FORMAT_SRATIONAL: return object(getSRational(index)); case EXIF_FORMAT_ASCII: //std::cerr << "returning " << entry_->size << " bytes of data..\n"; //std::cerr << " (copied into " << std::string((char *)data, entry_->size).size() << "-character string)\n"; return object(std::string((char *)entry_->data, entry_->size)); default: break; } return object(); } object data() const { if((format() == EXIF_FORMAT_ASCII) || (components()==1)) return component(0); else { list result; for(unsigned int i=0; i<components(); ++i) result.append(component(i)); return result; } } template<class Type> Type extractComponent(unsigned int index, object value, const char *errorString) { extract<Type> extr(value); if(!extr.check()) { PyErr_SetString(PyExc_TypeError, errorString); throw_error_already_set(); } return extr(); } void setComponent(unsigned int index, object value) { unsigned char *data= entry_->data + index * exif_format_get_size(format()); ExifByteOrder bo = exif_data_get_byte_order(entry_->parent->parent); switch(format()) { case EXIF_FORMAT_BYTE: *data= extractComponent<ExifByte>(index, value, "invalid assignment to data: could not convert value to byte format"); break; case EXIF_FORMAT_SHORT: exif_set_short(data, bo, extractComponent<ExifShort>(index, value, "invalid assignment to data: could not convert value to short format")); break; case EXIF_FORMAT_LONG: exif_set_long(data, bo, extractComponent<ExifLong>(index, value, "invalid assignment to data: could not convert value to long format")); break; case EXIF_FORMAT_SLONG: exif_set_slong(data, bo, extractComponent<ExifSLong>(index, value, "invalid assignment to data: could not convert value to signed long format")); break; case EXIF_FORMAT_RATIONAL: exif_set_rational(data, bo, extractComponent<ExifRational>(index, value, "invalid assignment to data: could not convert value to rational format (2-tuple expected)")); break; case EXIF_FORMAT_SRATIONAL: exif_set_srational(data, bo, extractComponent<ExifSRational>(index, value, "invalid assignment to data: could not convert value to signed rational format (2-tuple expected)")); break; case EXIF_FORMAT_ASCII: // handled in setData directly case EXIF_FORMAT_UNDEFINED: break; } return; } void setData(object data) { if(format() == EXIF_FORMAT_ASCII) { extract<std::string> xstr(data); if(xstr.check()) { std::string s= xstr(); if(entry_->data) free(entry_->data); entry_->components= s.size(); //std::cerr << "assigning " << s.size() << "-character string..\n"; entry_->size= exif_format_get_size(format()) * entry_->components; entry_->data= (unsigned char *)malloc(entry_->size); memcpy(entry_->data, s.data(), entry_->size); entry_->data[entry_->size]= 0; } else { PyErr_SetString(PyExc_TypeError, "invalid assignment to data of ASCII format entry: string expected"); throw_error_already_set(); } } else { if(components()==1) setComponent(0, data); else { extract<list> xlist(data); if(xlist.check()) { list l= xlist(); for(unsigned i=0; i<components(); ++i) setComponent(i, l[i]); } else { PyErr_SetString(PyExc_TypeError, "invalid assignment to data of entry with more than one component: list expected"); throw_error_already_set(); } } } } }; struct PythonContent : public Exif::Content { typedef WrappedObjectIterator<PythonEntry, ExifEntry *> iterator; PythonContent() {} PythonContent(Exif::Content const &other) : Exif::Content(other) {} PythonEntry entry(object index) { // TODO: use Exif::Content::entry() functions extract<ExifTag> xtag(index); if(xtag.check()) { ExifTag index= xtag(); for(unsigned int i=0; i<size(); i++) { if(content_->entries[i]->tag == index) return Exif::Entry(content_->entries[i]); } PyErr_SetString(PyExc_KeyError, "tag not present in IFD content"); throw_error_already_set(); } extract<int> xint(index); if(xint.check()) { int index= xint(); if((index>=0) && (index<(long)size())) return Exif::Entry(content_->entries[index]); if((index<0) && (index>=-(long)size())) return Exif::Entry(content_->entries[size()+index]); PyErr_SetString(PyExc_IndexError, "invalid integer index into IFD content"); throw_error_already_set(); } PyErr_SetString(PyExc_TypeError, "invalid index into EXIF data (integer or IFD expected)"); throw_error_already_set(); return Exif::Entry(); // never reached } iterator __iter__() { // FIXME: the public API is exif_content_foreach, // relying on memory layout here! return iterator(content_->entries, content_->entries + content_->count); } }; struct PythonData : public Exif::Data { typedef WrappedObjectIterator<PythonContent, ExifContent *> iterator; bool success_; PythonData() {} PythonData(const char *path) : Exif::Data(path, &success_) { if(!success_) { PyErr_SetFromErrno(PyExc_IOError); //PyErr_SetString(PyExc_IOError, ""); throw_error_already_set(); } } PythonData(const unsigned char *data, unsigned int size) : Exif::Data(data, size) {} PythonData(Exif::Data const &other) : Exif::Data(other) {} PythonContent ifdContent(object index) { extract<ExifIfd> xifd(index); if(xifd.check()) { ExifIfd index= xifd(); if(index<EXIF_IFD_COUNT) return Exif::Content(data_->ifd[index]); PyErr_SetString(PyExc_IndexError, "invalid IFD index into EXIF data"); throw_error_already_set(); } extract<int> xint(index); if(xint.check()) { int index= xint(); if((index>=0) && (index<(long)size())) return Exif::Content(data_->ifd[index]); if((index<0) && (index>=-(long)size())) return Exif::Content(data_->ifd[size()+index]); PyErr_SetString(PyExc_IndexError, "invalid integer index into EXIF data"); throw_error_already_set(); } PyErr_SetString(PyExc_TypeError, "invalid index into EXIF data (integer or IFD expected)"); throw_error_already_set(); return Exif::Content(); // never reached } iterator __iter__() { return iterator(data_->ifd, data_->ifd + EXIF_IFD_COUNT); } }; template<class Rational, class Component> struct RationalConverter { RationalConverter() { converter::registry::insert(&convertible, &construct, type_id<Rational>()); } static void* convertible(PyObject* obj) { extract<tuple> xtup(obj); if(xtup.check()) { tuple t= xtup(); if((t.attr("__len__")() == 2) && extract<Component>(t[0]).check() && extract<Component>(t[1]).check()) { Rational *result = new Rational; result->numerator = extract<Component>(t[0])(); result->denominator = extract<Component>(t[1])(); return result; } } return NULL; } static void construct(PyObject* obj, converter::rvalue_from_python_stage1_data* data) { Rational const* r = static_cast<Rational*>(data->convertible); void* storage = ((converter::rvalue_from_python_storage<Rational>*)data)->storage.bytes; new (storage) Rational(); ((Rational*)storage)->numerator = r->numerator; ((Rational*)storage)->denominator = r->denominator; data->convertible = storage; delete r; } static PyObject *convert(Rational r) { tuple t= make_tuple(r.numerator, r.denominator); PyObject *result= t.ptr(); Py_INCREF(result); return result; } }; BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(entrydumps, Exif::Entry::dump, 0, 1) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(contentdumps, Exif::Content::dump, 0, 1) BOOST_PYTHON_MODULE(exif) { RationalConverter<ExifRational, ExifLong>(); RationalConverter<ExifSRational, ExifSLong>(); to_python_converter<ExifRational, RationalConverter<ExifRational, ExifLong> >(); to_python_converter<ExifSRational, RationalConverter<ExifSRational, ExifSLong> >(); enum_<ExifByteOrder>("ByteOrder") .value("MOTOROLA", EXIF_BYTE_ORDER_MOTOROLA) .value("INTEL", EXIF_BYTE_ORDER_INTEL); def("name", &exif_byte_order_get_name); enum_<ExifIfd>("IFD") .value("ZERO", EXIF_IFD_0) .value("ONE", EXIF_IFD_1) .value("EXIF", EXIF_IFD_EXIF) .value("GPS", EXIF_IFD_GPS) .value("INTEROPERABILITY", EXIF_IFD_INTEROPERABILITY); //.value("COUNT", EXIF_IFD_COUNT) def("name", &exif_ifd_get_name); enum_<ExifFormat>("Format") .value("BYTE", EXIF_FORMAT_BYTE) .value("ASCII", EXIF_FORMAT_ASCII) .value("SHORT", EXIF_FORMAT_SHORT) .value("LONG", EXIF_FORMAT_LONG) .value("RATIONAL", EXIF_FORMAT_RATIONAL) .value("UNDEFINED", EXIF_FORMAT_UNDEFINED) .value("SLONG", EXIF_FORMAT_SLONG) .value("SRATIONAL", EXIF_FORMAT_SRATIONAL); def("name", &exif_format_get_name); def("size", &exif_format_get_size); enum_<ExifTag>("Tag") .value("INTEROPERABILITY_INDEX", EXIF_TAG_INTEROPERABILITY_INDEX) .value("INTEROPERABILITY_VERSION", EXIF_TAG_INTEROPERABILITY_VERSION) .value("IMAGE_WIDTH", EXIF_TAG_IMAGE_WIDTH) .value("IMAGE_LENGTH", EXIF_TAG_IMAGE_LENGTH) .value("BITS_PER_SAMPLE", EXIF_TAG_BITS_PER_SAMPLE) .value("COMPRESSION", EXIF_TAG_COMPRESSION) .value("PHOTOMETRIC_INTERPRETATION", EXIF_TAG_PHOTOMETRIC_INTERPRETATION) .value("FILL_ORDER", EXIF_TAG_FILL_ORDER) .value("DOCUMENT_NAME", EXIF_TAG_DOCUMENT_NAME) .value("IMAGE_DESCRIPTION", EXIF_TAG_IMAGE_DESCRIPTION) .value("MAKE", EXIF_TAG_MAKE) .value("MODEL", EXIF_TAG_MODEL) .value("STRIP_OFFSETS", EXIF_TAG_STRIP_OFFSETS) .value("ORIENTATION", EXIF_TAG_ORIENTATION) .value("SAMPLES_PER_PIXEL", EXIF_TAG_SAMPLES_PER_PIXEL) .value("ROWS_PER_STRIP", EXIF_TAG_ROWS_PER_STRIP) .value("STRIP_BYTE_COUNTS", EXIF_TAG_STRIP_BYTE_COUNTS) .value("X_RESOLUTION", EXIF_TAG_X_RESOLUTION) .value("Y_RESOLUTION", EXIF_TAG_Y_RESOLUTION) .value("PLANAR_CONFIGURATION", EXIF_TAG_PLANAR_CONFIGURATION) .value("RESOLUTION_UNIT", EXIF_TAG_RESOLUTION_UNIT) .value("TRANSFER_FUNCTION", EXIF_TAG_TRANSFER_FUNCTION) .value("SOFTWARE", EXIF_TAG_SOFTWARE) .value("DATE_TIME", EXIF_TAG_DATE_TIME) .value("ARTIST", EXIF_TAG_ARTIST) .value("WHITE_POINT", EXIF_TAG_WHITE_POINT) .value("PRIMARY_CHROMATICITIES", EXIF_TAG_PRIMARY_CHROMATICITIES) .value("TRANSFER_RANGE", EXIF_TAG_TRANSFER_RANGE) .value("JPEG_PROC", EXIF_TAG_JPEG_PROC) .value("JPEG_INTERCHANGE_FORMAT", EXIF_TAG_JPEG_INTERCHANGE_FORMAT) .value("JPEG_INTERCHANGE_FORMAT_LENGTH", EXIF_TAG_JPEG_INTERCHANGE_FORMAT_LENGTH) .value("YCBCR_COEFFICIENTS", EXIF_TAG_YCBCR_COEFFICIENTS) .value("YCBCR_SUB_SAMPLING", EXIF_TAG_YCBCR_SUB_SAMPLING) .value("YCBCR_POSITIONING", EXIF_TAG_YCBCR_POSITIONING) .value("REFERENCE_BLACK_WHITE", EXIF_TAG_REFERENCE_BLACK_WHITE) .value("RELATED_IMAGE_FILE_FORMAT", EXIF_TAG_RELATED_IMAGE_FILE_FORMAT) .value("RELATED_IMAGE_WIDTH", EXIF_TAG_RELATED_IMAGE_WIDTH) .value("RELATED_IMAGE_LENGTH", EXIF_TAG_RELATED_IMAGE_LENGTH) .value("CFA_REPEAT_PATTERN_DIM", EXIF_TAG_CFA_REPEAT_PATTERN_DIM) .value("CFA_PATTERN", EXIF_TAG_CFA_PATTERN) .value("BATTERY_LEVEL", EXIF_TAG_BATTERY_LEVEL) .value("COPYRIGHT", EXIF_TAG_COPYRIGHT) .value("EXPOSURE_TIME", EXIF_TAG_EXPOSURE_TIME) .value("FNUMBER", EXIF_TAG_FNUMBER) .value("IPTC_NAA", EXIF_TAG_IPTC_NAA) .value("EXIF_IFD_POINTER", EXIF_TAG_EXIF_IFD_POINTER) .value("INTER_COLOR_PROFILE", EXIF_TAG_INTER_COLOR_PROFILE) .value("EXPOSURE_PROGRAM", EXIF_TAG_EXPOSURE_PROGRAM) .value("SPECTRAL_SENSITIVITY", EXIF_TAG_SPECTRAL_SENSITIVITY) .value("GPS_INFO_IFD_POINTER", EXIF_TAG_GPS_INFO_IFD_POINTER) .value("ISO_SPEED_RATINGS", EXIF_TAG_ISO_SPEED_RATINGS) .value("OECF", EXIF_TAG_OECF) .value("EXIF_VERSION", EXIF_TAG_EXIF_VERSION) .value("DATE_TIME_ORIGINAL", EXIF_TAG_DATE_TIME_ORIGINAL) .value("DATE_TIME_DIGITIZED", EXIF_TAG_DATE_TIME_DIGITIZED) .value("COMPONENTS_CONFIGURATION", EXIF_TAG_COMPONENTS_CONFIGURATION) .value("COMPRESSED_BITS_PER_PIXEL", EXIF_TAG_COMPRESSED_BITS_PER_PIXEL) .value("SHUTTER_SPEED_VALUE", EXIF_TAG_SHUTTER_SPEED_VALUE) .value("APERTURE_VALUE", EXIF_TAG_APERTURE_VALUE) .value("BRIGHTNESS_VALUE", EXIF_TAG_BRIGHTNESS_VALUE) .value("EXPOSURE_BIAS_VALUE", EXIF_TAG_EXPOSURE_BIAS_VALUE) .value("MAX_APERTURE_VALUE", EXIF_TAG_MAX_APERTURE_VALUE) .value("SUBJECT_DISTANCE", EXIF_TAG_SUBJECT_DISTANCE) .value("METERING_MODE", EXIF_TAG_METERING_MODE) .value("LIGHT_SOURCE", EXIF_TAG_LIGHT_SOURCE) .value("FLASH", EXIF_TAG_FLASH) .value("FOCAL_LENGTH", EXIF_TAG_FOCAL_LENGTH) .value("SUBJECT_AREA", EXIF_TAG_SUBJECT_AREA) .value("MAKER_NOTE", EXIF_TAG_MAKER_NOTE) .value("USER_COMMENT", EXIF_TAG_USER_COMMENT) .value("SUBSEC_TIME", EXIF_TAG_SUBSEC_TIME) .value("SUB_SEC_TIME_ORIGINAL", EXIF_TAG_SUB_SEC_TIME_ORIGINAL) .value("SUB_SEC_TIME_DIGITIZED", EXIF_TAG_SUB_SEC_TIME_DIGITIZED) .value("FLASH_PIX_VERSION", EXIF_TAG_FLASH_PIX_VERSION) .value("COLOR_SPACE", EXIF_TAG_COLOR_SPACE) .value("PIXEL_X_DIMENSION", EXIF_TAG_PIXEL_X_DIMENSION) .value("PIXEL_Y_DIMENSION", EXIF_TAG_PIXEL_Y_DIMENSION) .value("RELATED_SOUND_FILE", EXIF_TAG_RELATED_SOUND_FILE) .value("INTEROPERABILITY_IFD_POINTER", EXIF_TAG_INTEROPERABILITY_IFD_POINTER) .value("FLASH_ENERGY", EXIF_TAG_FLASH_ENERGY) .value("SPATIAL_FREQUENCY_RESPONSE", EXIF_TAG_SPATIAL_FREQUENCY_RESPONSE) .value("FOCAL_PLANE_X_RESOLUTION", EXIF_TAG_FOCAL_PLANE_X_RESOLUTION) .value("FOCAL_PLANE_Y_RESOLUTION", EXIF_TAG_FOCAL_PLANE_Y_RESOLUTION) .value("FOCAL_PLANE_RESOLUTION_UNIT", EXIF_TAG_FOCAL_PLANE_RESOLUTION_UNIT) .value("SUBJECT_LOCATION", EXIF_TAG_SUBJECT_LOCATION) .value("EXPOSURE_INDEX", EXIF_TAG_EXPOSURE_INDEX) .value("SENSING_METHOD", EXIF_TAG_SENSING_METHOD) .value("FILE_SOURCE", EXIF_TAG_FILE_SOURCE) .value("SCENE_TYPE", EXIF_TAG_SCENE_TYPE) .value("NEW_CFA_PATTERN", EXIF_TAG_NEW_CFA_PATTERN) .value("CUSTOM_RENDERED", EXIF_TAG_CUSTOM_RENDERED) .value("EXPOSURE_MODE", EXIF_TAG_EXPOSURE_MODE) .value("WHITE_BALANCE", EXIF_TAG_WHITE_BALANCE) .value("DIGITAL_ZOOM_RATIO", EXIF_TAG_DIGITAL_ZOOM_RATIO) .value("FOCAL_LENGTH_IN_35MM_FILM", EXIF_TAG_FOCAL_LENGTH_IN_35MM_FILM) .value("SCENE_CAPTURE_TYPE", EXIF_TAG_SCENE_CAPTURE_TYPE) .value("GAIN_CONTROL", EXIF_TAG_GAIN_CONTROL) .value("CONTRAST", EXIF_TAG_CONTRAST) .value("SATURATION", EXIF_TAG_SATURATION) .value("SHARPNESS", EXIF_TAG_SHARPNESS) .value("DEVICE_SETTING_DESCRIPTION", EXIF_TAG_DEVICE_SETTING_DESCRIPTION) .value("SUBJECT_DISTANCE_RANGE", EXIF_TAG_SUBJECT_DISTANCE_RANGE) .value("IMAGE_UNIQUE_ID", EXIF_TAG_IMAGE_UNIQUE_ID); def("name", &exif_tag_get_name); def("title", &exif_tag_get_title); def("description", &exif_tag_get_description); class_<PythonEntry>("Entry") .add_property("tag", &Exif::Entry::tag) .add_property("format", &Exif::Entry::format) .add_property("components", &Exif::Entry::components) .add_property("data", &PythonEntry::data, &PythonEntry::setData) .def("value", &Exif::Entry::value) .def("briefValue", &Exif::Entry::briefValue) .def("dump", &Exif::Entry::dump);//, entrydumps()); class_<PythonContent::iterator>("ContentIterator", no_init) .def("next", &PythonContent::iterator::next); class_<PythonContent>("Content") .def("__len__", &Exif::Content::size) .def("__getitem__", &PythonContent::entry) .def("__iter__", &PythonContent::__iter__) .def("dump", &Exif::Content::dump);//, contentdumps()); class_<PythonData::iterator>("DataIterator", no_init) .def("next", &PythonData::iterator::next); class_<PythonData>("Data") .def(init<const char *>()) .def(init<const unsigned char *, unsigned int>()) .def("__len__", &Exif::Data::size) .def("__getitem__", &PythonData::ifdContent) .def("__iter__", &PythonData::__iter__) .def("byteOrder", &Exif::Data::byteOrder) .def("dump", &Exif::Data::dump); } --- NEW FILE: Makefile --- BOOST_PYTHON_LIB = -L/usr/local/boost_1_29_0/lib -lboost_python BOOST_INCLUDES = -I/usr/local/boost_1_29_0/src dynmoddir = `pwd`/local CXX = g++ CXXFLAGS := -O2 -Wall CPPFLAGS := -I/usr/include/python2.2 LIBTOOL = $(SHELL) ./libtool LIBCXX = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) LINKCXX = $(LIBTOOL) --tag=CXX --mode=link $(CXX) LINKCXXLIB = $(LINKCXX) -rpath $(dynmoddir) LINKCXXMODULE = $(LINKCXXLIB) -module -avoid-version LIBINSTALL = $(LIBTOOL) --mode=install /bin/install -c -p INSTALL = /bin/install -c -p TARGET = exif.la OBJS = \ exif_module.lo all: $(TARGET) install: $(TARGET) $(INSTALL) -d $(dynmoddir) $(LIBINSTALL) $(TARGET) $(dynmoddir) $(TARGET): $(OBJS) $(LINKCXXMODULE) -o $(TARGET) $(OBJS) $(BOOST_PYTHON_LIB) -lexif clean:: rm -rf .libs *.o *.so *.lo *.ld $(TARGET) %.o: %.cxx $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $*.cxx %.lo: %.cxx $(LIBCXX) $(CXXFLAGS) $(CPPFLAGS) -c $*.cxx %.d: %.cxx @echo updating header dependencies for $*.cxx @rm -f $*.d @$(CXX) -M $(CXXFLAGS) $(CPPFLAGS) -c $*.cxx | sed "s@$*.o@$*.d $*.o@" > $*.d \ || { rm -f $*.d; exit 1; } %.ld: %.cxx @echo updating header dependencies for $*.cxx @rm -f $*.ld @$(CXX) -M $(CXXFLAGS) $(CPPFLAGS) -c $*.cxx | sed "s@$*.o@$*.ld $*.lo@" > $*.ld \ || { rm -f $*.ld; exit 1; } ifneq "$(MAKECMDGOALS)" "clean" include $(patsubst %.lo, %.ld, $(OBJS)) endif --- NEW FILE: exif.hxx --- /* exif.hxx * * Copyright 2002,2003 Hans Meine <han...@gm...> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef EXIF_HXX #define EXIF_HXX #include <libexif/exif-entry.h> #include <libexif/exif-content.h> #include <libexif/exif-ifd.h> #include <libexif/exif-data.h> #include <libexif/exif-format.h> #include <libexif/exif-utils.h> #include <stdexcept> #include <string> namespace Exif { #ifndef EXIF_NO_EXCEPTIONS struct InvalidIndex : std::runtime_error { InvalidIndex(const std::string& s) : std::runtime_error(s) {} }; struct InvalidFormat : std::runtime_error { InvalidFormat(const std::string& s) : std::runtime_error(s) {} }; struct IOError : std::runtime_error { IOError(const std::string& s) : std::runtime_error(s) {} }; #endif // EXIF_NO_EXCEPTIONS struct Entry { ExifEntry *entry_; // construct an empty entry, FIXME: is this needed in the public API? Entry() : entry_(exif_entry_new()) {} // construct an entry for the given tag Entry(ExifTag tag) : entry_(exif_entry_new()) { exif_entry_initialize(entry_, tag); } // copy constructor Entry(Entry const &other) : entry_(other.entry_) { exif_entry_ref(entry_); } // internal, do not use directly Entry(ExifEntry *entry) : entry_(entry) { exif_entry_ref(entry_); } ~Entry() { exif_entry_unref(entry_); } Entry &operator=(Entry const &other) { exif_entry_unref(entry_); entry_ = other.entry_; exif_entry_ref(entry_); return *this; } ExifTag tag() const { return entry_->tag; } /* void setTag(ExifTag tag) { entry_->tag = tag; } */ ExifFormat format() const { return entry_->format; } /* void setFormat(ExifFormat format) { entry_->format = format; } */ unsigned long components() const { return entry_->components; } /* void setComponents(unsigned long components) { entry_->components = components; } void initialize(ExifTag tag) { exif_entry_initialize(entry_, tag); } */ ExifByte getByte(unsigned int index) const { #ifndef EXIF_NO_EXCEPTIONS if(entry_->format != EXIF_FORMAT_BYTE) throw InvalidFormat( "Exif::Entry::getByte(): Format is not EXIF_FORMAT_BYTE"); if(index >= components()) throw InvalidIndex( "Exif::getByte: component index out of range"); #endif return *(entry_->data + index * exif_format_get_size(entry_->format)); } const ExifAscii getAscii() const { #ifndef EXIF_NO_EXCEPTIONS if(entry_->format != EXIF_FORMAT_ASCII) throw InvalidFormat( "Exif::Entry::getAscii(): Format is not EXIF_FORMAT_ASCII"); #endif return (ExifAscii)entry_->data; } ExifShort getShort(unsigned int index) const { #ifndef EXIF_NO_EXCEPTIONS if(entry_->format != EXIF_FORMAT_SHORT) throw InvalidFormat( "Exif::Entry::getShort(): Format is not EXIF_FORMAT_SHORT"); if(index >= components()) throw InvalidIndex( "Exif::getShort: component index out of range"); #endif return exif_get_short(entry_->data + index * exif_format_get_size(entry_->format), exif_data_get_byte_order(entry_->parent->parent)); } ExifLong getLong(unsigned int index) const { #ifndef EXIF_NO_EXCEPTIONS if(entry_->format != EXIF_FORMAT_LONG) throw InvalidFormat( "Exif::Entry::getLong(): Format is not EXIF_FORMAT_LONG"); if(index >= components()) throw InvalidIndex( "Exif::getLong: component index out of range"); #endif return exif_get_long(entry_->data + index * exif_format_get_size(entry_->format), exif_data_get_byte_order(entry_->parent->parent)); } ExifSLong getSLong(unsigned int index) const { #ifndef EXIF_NO_EXCEPTIONS if(entry_->format != EXIF_FORMAT_SLONG) throw InvalidFormat( "Exif::Entry::getSLong(): Format is not EXIF_FORMAT_SLONG"); if(index >= components()) throw InvalidIndex( "Exif::getSLong: component index out of range"); #endif return exif_get_slong(entry_->data + index * exif_format_get_size(entry_->format), exif_data_get_byte_order(entry_->parent->parent)); } ExifRational getRational(unsigned int index) const { #ifndef EXIF_NO_EXCEPTIONS if(entry_->format != EXIF_FORMAT_RATIONAL) throw InvalidFormat( "Exif::Entry::getRational(): Format is not EXIF_FORMAT_RATIONAL"); if(index >= components()) throw InvalidIndex( "Exif::getRational: component index out of range"); #endif return exif_get_rational(entry_->data + index * exif_format_get_size(entry_->format), exif_data_get_byte_order(entry_->parent->parent)); } ExifSRational getSRational(unsigned int index) const { #ifndef EXIF_NO_EXCEPTIONS if(entry_->format != EXIF_FORMAT_SRATIONAL) throw InvalidFormat( "Exif::Entry::getSRational(): Format is not EXIF_FORMAT_SRATIONAL"); if(index >= components()) throw InvalidIndex( "Exif::getSRational: component index out of range"); #endif return exif_get_srational(entry_->data + index * exif_format_get_size(entry_->format), exif_data_get_byte_order(entry_->parent->parent)); } void setByte(unsigned int index, ExifByte value) const { #ifndef EXIF_NO_EXCEPTIONS if(entry_->format != EXIF_FORMAT_BYTE) throw InvalidFormat( "Exif::Entry::setByte(): Format is not EXIF_FORMAT_BYTE"); if(index >= components()) throw InvalidIndex( "Exif::setByte: component index out of range"); #endif *(entry_->data + index * exif_format_get_size(entry_->format)) = value; } /* const ExifAscii setAscii() const { #ifndef EXIF_NO_EXCEPTIONS if(entry_->format != EXIF_FORMAT_ASCII) throw InvalidFormat( "Exif::Entry::setAscii(): Format is not EXIF_FORMAT_ASCII"); #endif return (ExifAscii)entry_->data; } */ void setShort(unsigned int index, ExifShort value) const { #ifndef EXIF_NO_EXCEPTIONS if(entry_->format != EXIF_FORMAT_SHORT) throw InvalidFormat( "Exif::Entry::setShort(): Format is not EXIF_FORMAT_SHORT"); if(index >= components()) throw InvalidIndex( "Exif::setShort: component index out of range"); #endif return exif_set_short(entry_->data + index * exif_format_get_size(entry_->format), exif_data_get_byte_order(entry_->parent->parent), value); } void setLong(unsigned int index, ExifLong value) const { #ifndef EXIF_NO_EXCEPTIONS if(entry_->format != EXIF_FORMAT_LONG) throw InvalidFormat( "Exif::Entry::setLong(): Format is not EXIF_FORMAT_LONG"); if(index >= components()) throw InvalidIndex( "Exif::setLong: component index out of range"); #endif return exif_set_long(entry_->data + index * exif_format_get_size(entry_->format), exif_data_get_byte_order(entry_->parent->parent), value); } void setSLong(unsigned int index, ExifSLong value) const { #ifndef EXIF_NO_EXCEPTIONS if(entry_->format != EXIF_FORMAT_SLONG) throw InvalidFormat( "Exif::Entry::setSLong(): Format is not EXIF_FORMAT_SLONG"); if(index >= components()) throw InvalidIndex( "Exif::setSLong: component index out of range"); #endif return exif_set_slong(entry_->data + index * exif_format_get_size(entry_->format), exif_data_get_byte_order(entry_->parent->parent), value); } void setRational(unsigned int index, ExifRational value) const { #ifndef EXIF_NO_EXCEPTIONS if(entry_->format != EXIF_FORMAT_RATIONAL) throw InvalidFormat( "Exif::Entry::setRational(): Format is not EXIF_FORMAT_RATIONAL"); if(index >= components()) throw InvalidIndex( "Exif::setRational: component index out of range"); #endif return exif_set_rational(entry_->data + index * exif_format_get_size(entry_->format), exif_data_get_byte_order(entry_->parent->parent), value); } void setSRational(unsigned int index, ExifSRational value) const { #ifndef EXIF_NO_EXCEPTIONS if(entry_->format != EXIF_FORMAT_SRATIONAL) throw InvalidFormat( "Exif::Entry::setSRational(): Format is not EXIF_FORMAT_SRATIONAL"); if(index >= components()) throw InvalidIndex( "Exif::setSRational: component index out of range"); #endif return exif_set_srational(entry_->data + index * exif_format_get_size(entry_->format), exif_data_get_byte_order(entry_->parent->parent), value); } const char *value() { return exif_entry_get_value(entry_); } const char *briefValue() { return exif_entry_get_value_brief(entry_); } void dump(unsigned int indent = 0) const { exif_entry_dump(entry_, indent); } }; struct Content { ExifContent *content_; Content() : content_(exif_content_new()) {} Content(Content const &other) : content_(other.content_) { exif_content_ref(content_); } // internal, do not use directly Content(ExifContent *content) : content_(content) { exif_content_ref(content_); } ~Content() { exif_content_unref(content_); } Content &operator=(Content const &other) { exif_content_unref(content_); content_ = other.content_; exif_content_ref(content_); return *this; } Entry operator[](ExifTag tag) { ExifEntry *result = exif_content_get_entry(content_, tag); if(result) return Entry(result); #ifndef EXIF_NO_EXCEPTIONS throw InvalidIndex( "Exif::Content: IFD does not contain given tag"); #endif return Entry(); } Entry operator[](unsigned int index) { if(index < size()) return Entry(content_->entries[index]); #ifndef EXIF_NO_EXCEPTIONS throw InvalidIndex( "Exif::Content: numeric entry index out of range"); #endif // EXIF_NO_EXCEPTIONS return Entry(); } unsigned int size() const { // FIXME: content_ should never be NULL, so this is unneeded!? return content_ ? content_->count : 0; } void add(Entry &entry) { exif_content_add_entry(content_, entry.entry_); } void remove(Entry &entry) { exif_content_remove_entry(content_, entry.entry_); } // for your convenience const char *value(ExifTag tag) { return exif_content_get_value(content_, tag); } // for your convenience const char *briefValue(ExifTag tag) { return exif_content_get_value_brief(content_, tag); } void dump(unsigned int indent = 0) const { exif_content_dump(content_, indent); } }; struct Data { ExifData *data_; Data() : data_(exif_data_new()) {} Data(const char *path, bool *success = 0) : data_(exif_data_new_from_file(path)) { if(success) *success = data_; #ifndef EXIF_NO_EXCEPTIONS else if(!data_) throw IOError("Exif::Data: Could not load file"); #endif // EXIF_NO_EXCEPTIONS if(!data_) exif_data_new(); } Data(const unsigned char *data, unsigned int size) : data_(exif_data_new_from_data(data, size)) {} Data(Data const &other) : data_(other.data_) { exif_data_ref(data_); } ~Data() { exif_data_unref(data_); } Data &operator=(Data const &other) { exif_data_unref(data_); data_ = other.data_; exif_data_ref(data_); return *this; } void save(unsigned char **d, unsigned int *size) { exif_data_save_data(data_, d, size); } unsigned int size() const { return EXIF_IFD_COUNT; } Content operator[](unsigned int index) { if(index < size()) return Content(data_->ifd[index]); #ifndef EXIF_NO_EXCEPTIONS throw InvalidIndex( "Exif::Data: IFD index out of range"); #endif // EXIF_NO_EXCEPTIONS return Content(); } ExifByteOrder byteOrder() const { return exif_data_get_byte_order(data_); } void setByteOrder(ExifByteOrder bo) const { exif_data_set_byte_order(data_, bo); } void dump() { exif_data_dump(data_); } }; } // namespace Exif #endif // EXIF_HXX |
From: Lutz M?l. <lu...@us...> - 2004-01-19 21:49:53
|
Update of /cvsroot/libexif/libexif In directory sc8-pr-cvs1:/tmp/cvs-serv7833 Modified Files: ChangeLog Log Message: 2004-01-19 Lutz Mueller <lu...@us...> * contrib/c++: Files contributed by Hans Meine <han...@gm...>. Completely untested. Index: ChangeLog =================================================================== RCS file: /cvsroot/libexif/libexif/ChangeLog,v retrieving revision 1.93 retrieving revision 1.94 diff -u -d -r1.93 -r1.94 --- ChangeLog 7 Jan 2004 23:36:16 -0000 1.93 +++ ChangeLog 19 Jan 2004 21:49:49 -0000 1.94 @@ -1,3 +1,8 @@ +2004-01-19 Lutz Mueller <lu...@us...> + + * contrib/c++: Files contributed by Hans Meine <han...@gm...>. + Completely untested. + 2004-01-08 Lutz Mueller <lu...@us...> * libexif/exif-entry.c (exif_entry_get_value_brief): merge into |
From: Lutz M?l. <lu...@us...> - 2004-01-19 21:45:01
|
Update of /cvsroot/libexif/libexif/contrib/c++ In directory sc8-pr-cvs1:/tmp/cvs-serv6429/contrib/c++ Log Message: Directory /cvsroot/libexif/libexif/contrib/c++ added to the repository |
From: Lutz M?l. <lu...@us...> - 2004-01-19 21:44:50
|
Update of /cvsroot/libexif/libexif/contrib In directory sc8-pr-cvs1:/tmp/cvs-serv6372/contrib Log Message: Directory /cvsroot/libexif/libexif/contrib added to the repository |
From: Hans U. N. <hu...@us...> - 2004-01-10 21:09:02
|
Update of /cvsroot/libexif/exif In directory sc8-pr-cvs1:/tmp/cvs-serv10379 Modified Files: Makefile.am configure.in Log Message: undo changes breaking build Index: configure.in =================================================================== RCS file: /cvsroot/libexif/exif/configure.in,v retrieving revision 1.27 retrieving revision 1.28 diff -u -d -r1.27 -r1.28 --- configure.in 7 Jan 2004 23:38:07 -0000 1.27 +++ configure.in 10 Jan 2004 21:08:59 -0000 1.28 @@ -104,7 +104,6 @@ exif.spec libjpeg/Makefile exif/Makefile - po/Makefile.in ]) echo " Index: Makefile.am =================================================================== RCS file: /cvsroot/libexif/exif/Makefile.am,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- Makefile.am 7 Jan 2004 23:38:07 -0000 1.14 +++ Makefile.am 10 Jan 2004 21:08:59 -0000 1.15 @@ -1,8 +1,6 @@ -SUBDIRS = libjpeg exif po intl +SUBDIRS = libjpeg exif po man_MANS = exif.1 # newer versions of automake/autoconf require this, OK? EXTRA_DIST = exif.1 exif.spec - -ACLOCAL_AMFLAGS = -I m4 |
From: Hans U. N. <hu...@us...> - 2004-01-10 19:24:36
|
Update of /cvsroot/libexif/libexif In directory sc8-pr-cvs1:/tmp/cvs-serv20042 Modified Files: Makefile.am configure.in Log Message: undo changes breaking build Index: configure.in =================================================================== RCS file: /cvsroot/libexif/libexif/configure.in,v retrieving revision 1.59 retrieving revision 1.60 diff -u -d -r1.59 -r1.60 --- configure.in 7 Jan 2004 23:36:16 -0000 1.59 +++ configure.in 10 Jan 2004 19:24:33 -0000 1.60 @@ -63,7 +63,6 @@ libjpeg/Makefile test/Makefile libexif/libexif.pc - po/Makefile.in ]) echo " Index: Makefile.am =================================================================== RCS file: /cvsroot/libexif/libexif/Makefile.am,v retrieving revision 1.26 retrieving revision 1.27 diff -u -d -r1.26 -r1.27 --- Makefile.am 7 Jan 2004 23:36:16 -0000 1.26 +++ Makefile.am 10 Jan 2004 19:24:33 -0000 1.27 @@ -1,5 +1,3 @@ -SUBDIRS = libexif libjpeg test intl po +SUBDIRS = libexif libjpeg test po EXTRA_DIST = @PACKAGE@.spec - -ACLOCAL_AMFLAGS = -I m4 |
From: Lutz M?l. <lu...@us...> - 2004-01-07 23:38:11
|
Update of /cvsroot/libexif/exif/exif In directory sc8-pr-cvs1:/tmp/cvs-serv22696/exif Modified Files: actions.c Log Message: 2004-01-08 Lutz Mueller <lu...@us...> * exif/actions.c: Adapt to new API * configure.in: Require libexif-0.5.13. Index: actions.c =================================================================== RCS file: /cvsroot/libexif/exif/exif/actions.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- actions.c 30 Sep 2003 22:43:00 -0000 1.14 +++ actions.c 7 Jan 2004 23:38:07 -0000 1.15 @@ -78,7 +78,7 @@ if (!name) continue; fprintf (stdout, " 0x%04x %-29.29s", tag, name); - if (mnote_data_get_value (en, tag)) + if (mnote_data_get_value (en, tag, txt, 1)) printf (ENTRY_FOUND); else printf (ENTRY_NOT_FOUND); @@ -92,6 +92,7 @@ show_entry (ExifEntry *e, void *data) { unsigned char *ids = data; + char v[128]; if (*ids) fprintf (stdout, "0x%04x", e->tag); @@ -99,9 +100,11 @@ fprintf (stdout, "%-20.20s", C(exif_tag_get_title (e->tag))); printf ("|"); if (*ids) - fprintf (stdout, "%-72.72s", C(exif_entry_get_value (e))); + fprintf (stdout, "%-72.72s", + C(exif_entry_get_value (e, v, 73))); else - fprintf (stdout, "%-58.58s", C(exif_entry_get_value (e))); + fprintf (stdout, "%-58.58s", + C(exif_entry_get_value (e, v, 59))); fputc ('\n', stdout); } @@ -117,6 +120,7 @@ show_note_entry (MNoteData *note, MNoteTag tag, void *data) { unsigned char *ids = data; + char v[73]; if (*ids) fprintf (stdout, "0x%04x", tag); @@ -124,9 +128,11 @@ fprintf (stdout, "%-20.20s", mnote_tag_get_title (note, tag)); printf ("|"); if (*ids) - fprintf (stdout, "%-72.72s", mnote_data_get_value (note, tag)); + fprintf (stdout, "%-72.72s", + mnote_data_get_value (note, tag, v, 73)); else - fprintf (stdout, "%-58.58s", mnote_data_get_value (note, tag)); + fprintf (stdout, "%-58.58s", + mnote_data_get_value (note, tag, v, 58)); fputc ('\n', stdout); } @@ -138,11 +144,9 @@ unsigned int i, width; width = (ids ? 6 : 20); - for (i = 0; i < width; i++) - fputc ('-', stdout); + for (i = 0; i < width; i++) fputc ('-', stdout); fputc ('+', stdout); - for (i = 0; i < 78 - width; i++) - fputc ('-', stdout); + for (i = 0; i < 78 - width; i++) fputc ('-', stdout); fputc ('\n', stdout); } @@ -180,15 +184,15 @@ } static void -show_entry_machine (ExifEntry *entry, void *data) +show_entry_machine (ExifEntry *e, void *data) { unsigned char *ids = data; + char *v[1024]; - if (*ids) fprintf (stdout, "0x%04x", entry->tag); - else fprintf (stdout, "%s", exif_tag_get_title (entry->tag)); + if (*ids) fprintf (stdout, "0x%04x", e->tag); + else fprintf (stdout, "%s", exif_tag_get_title (e->tag)); printf ("\t"); - if (*ids) fprintf (stdout, "%s", exif_entry_get_value (entry)); - else fprintf (stdout, "%s", exif_entry_get_value (entry)); + fprintf (stdout, "%s", exif_entry_get_value (e, v, sizeof (v))); fputc ('\n', stdout); } |
From: Lutz M?l. <lu...@us...> - 2004-01-07 23:38:10
|
Update of /cvsroot/libexif/exif In directory sc8-pr-cvs1:/tmp/cvs-serv22696 Modified Files: ChangeLog Makefile.am configure.in Log Message: 2004-01-08 Lutz Mueller <lu...@us...> * exif/actions.c: Adapt to new API * configure.in: Require libexif-0.5.13. Index: configure.in =================================================================== RCS file: /cvsroot/libexif/exif/configure.in,v retrieving revision 1.26 retrieving revision 1.27 diff -u -d -r1.26 -r1.27 --- configure.in 24 Aug 2003 18:39:30 -0000 1.26 +++ configure.in 7 Jan 2004 23:38:07 -0000 1.27 @@ -18,7 +18,7 @@ dnl --------------------------------------------------------------------------- dnl libraries needed dnl --------------------------------------------------------------------------- -PKG_CHECK_MODULES(LIBEXIF, libexif >= 0.5.9) +PKG_CHECK_MODULES(LIBEXIF, libexif >= 0.5.13) AC_SUBST(LIBEXIF_LIBS) AC_SUBST(LIBEXIF_CFLAGS) @@ -104,6 +104,7 @@ exif.spec libjpeg/Makefile exif/Makefile + po/Makefile.in ]) echo " Index: Makefile.am =================================================================== RCS file: /cvsroot/libexif/exif/Makefile.am,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- Makefile.am 24 Aug 2003 18:35:15 -0000 1.13 +++ Makefile.am 7 Jan 2004 23:38:07 -0000 1.14 @@ -1,6 +1,8 @@ -SUBDIRS = libjpeg exif po +SUBDIRS = libjpeg exif po intl man_MANS = exif.1 # newer versions of automake/autoconf require this, OK? EXTRA_DIST = exif.1 exif.spec + +ACLOCAL_AMFLAGS = -I m4 Index: ChangeLog =================================================================== RCS file: /cvsroot/libexif/exif/ChangeLog,v retrieving revision 1.33 retrieving revision 1.34 diff -u -d -r1.33 -r1.34 --- ChangeLog 15 Oct 2003 18:02:53 -0000 1.33 +++ ChangeLog 7 Jan 2004 23:38:07 -0000 1.34 @@ -1,6 +1,11 @@ +2004-01-08 Lutz Mueller <lu...@us...> + + * exif/actions.c: Adapt to new API + * configure.in: Require libexif-0.5.13. + 2003-10-15 Lutz Mueller <lu...@us...> - * exif.spec.in: Patches by Peter Bieringer <pb...@bi...>. + * exif.spec.in: Patches by Peter Bieringer <pb...@bi...>. 2003-10-01 Lutz Mueller <lu...@us...> |
From: Lutz M?l. <lu...@us...> - 2004-01-07 23:36:49
|
Update of /cvsroot/libexif/libexif/test In directory sc8-pr-cvs1:/tmp/cvs-serv22515/test Added Files: test-value.c Log Message: 2004-01-08 Lutz Mueller <lu...@us...> * libexif/exif-entry.c (exif_entry_get_value_brief): merge into (exif_entry_get_value) and remove. * tests/test-mnote.c: Make it compile again. * tests/test-value.c: New. * configure.in: API-changes -> increment version. --- NEW FILE: test-value.c --- #include <libexif/exif-utils.h> #include <libexif/exif-data.h> #include <stdio.h> int main (int argc, char **argv) { ExifData *d; ExifEntry *e; char v[1024]; ExifSRational r = {1., 20.}; unsigned int i; d = exif_data_new (); e = exif_entry_new (); exif_content_add_entry (d->ifd[EXIF_IFD_0], e); exif_entry_initialize (e, EXIF_TAG_SHUTTER_SPEED_VALUE); exif_set_srational (e->data, exif_data_get_byte_order (d), r); for (i = 30; i > 0; i--) printf ("Length %2i: '%s'\n", i, exif_entry_get_value (e, v, i)); exif_data_unref (d); return 0; } |
From: Lutz M?l. <lu...@us...> - 2004-01-07 23:36:20
|
Update of /cvsroot/libexif/libexif/libexif In directory sc8-pr-cvs1:/tmp/cvs-serv22394/libexif Modified Files: exif-content.h exif-entry.c exif-entry.h Log Message: 2004-01-08 Lutz Mueller <lu...@us...> * libexif/exif-entry.c (exif_entry_get_value_brief): merge into (exif_entry_get_value) and remove. * tests/test-mnote.c: Make it compile again. * tests/test-value.c: New. * configure.in: API-changes -> increment version. Index: exif-entry.h =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-entry.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- exif-entry.h 7 Jan 2004 15:12:12 -0000 1.9 +++ exif-entry.h 7 Jan 2004 23:36:16 -0000 1.10 @@ -54,8 +54,8 @@ void exif_entry_initialize (ExifEntry *entry, ExifTag tag); /* For your convenience */ -const char *exif_entry_get_value (ExifEntry *entry, char *val, unsigned int maxlen); -const char *exif_entry_get_value_brief (ExifEntry *entry, char *val, unsigned int maxlen); +const char *exif_entry_get_value (ExifEntry *entry, char *val, + unsigned int maxlen); void exif_entry_dump (ExifEntry *entry, unsigned int indent); Index: exif-content.h =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-content.h,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- exif-content.h 7 Jan 2004 15:12:11 -0000 1.8 +++ exif-content.h 7 Jan 2004 23:36:16 -0000 1.9 @@ -62,9 +62,6 @@ #define exif_content_get_value(c,t,v,m) \ (exif_content_get_entry (c,t) ? \ exif_entry_get_value (exif_content_get_entry (c,t),v,m) : NULL) -#define exif_content_get_value_brief(c,t,v,m) \ - (exif_content_get_entry (c,t) ? \ - exif_entry_get_value_brief (exif_content_get_entry (c,t),v,m) : NULL) void exif_content_dump (ExifContent *content, unsigned int indent); Index: exif-entry.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-entry.c,v retrieving revision 1.44 retrieving revision 1.45 diff -u -d -r1.44 -r1.45 --- exif-entry.c 7 Jan 2004 15:16:59 -0000 1.44 +++ exif-entry.c 7 Jan 2004 23:36:16 -0000 1.45 @@ -47,12 +47,12 @@ e = malloc (sizeof (ExifEntry)); if (!e) - return (NULL); + return NULL; memset (e, 0, sizeof (ExifEntry)); e->priv = malloc (sizeof (ExifEntryPrivate)); if (!e->priv) { free (e); - return (NULL); + return NULL; } memset (e->priv, 0, sizeof (ExifEntryPrivate)); e->priv->ref_count = 1; @@ -170,7 +170,7 @@ /* We need the byte order */ if (!e || !e->parent || !e->parent->parent) - return (NULL); + return NULL; o = exif_data_get_byte_order (e->parent->parent); memset (val, 0, maxlen); @@ -227,26 +227,27 @@ strncpy (val, e->data, MIN (maxlen, e->size)); else strncpy (val, _("[None]"), maxlen); - strncat (val, " ", maxlen - strlen(val)); - strncat (val, _("(Photographer)"), maxlen - strlen(val)); + strncat (val, " ", maxlen - strlen (val)); + strncat (val, _("(Photographer)"), maxlen - strlen (val)); /* Second part: Editor. */ - strncat (val, " - ", maxlen - strlen(val)); + strncat (val, " - ", maxlen - strlen (val)); if (e->size && e->data && (strlen ((char *) e->data) + 1 < e->size) && (strspn (e->data, " ") != strlen ((char *) e->data))) - strncat (val, e->data + strlen (e->data) + 1, maxlen - strlen(val)); + strncat (val, e->data + strlen (e->data) + 1, + maxlen - strlen (val)); else - strncat (val, _("[None]"), maxlen - strlen(val)); - strncat (val, " ", maxlen - strlen(val)); - strncat (val, _("(Editor)"), maxlen - strlen(val)); + strncat (val, _("[None]"), maxlen - strlen (val)); + strncat (val, " ", maxlen - strlen (val)); + strncat (val, _("(Editor)"), maxlen - strlen (val)); break; case EXIF_TAG_FNUMBER: CF (e->format, EXIF_FORMAT_RATIONAL, val, maxlen); CC (e->components, 1, val, maxlen); v_rat = exif_get_rational (e->data, o); - if (!v_rat.denominator) return (NULL); + if (!v_rat.denominator) return NULL; snprintf (val, maxlen, "f/%.01f", (float) v_rat.numerator / (float) v_rat.denominator); break; @@ -254,7 +255,7 @@ CF (e->format, EXIF_FORMAT_RATIONAL, val, maxlen); CC (e->components, 1, val, maxlen); v_rat = exif_get_rational (e->data, o); - if (!v_rat.denominator) return (NULL); + if (!v_rat.denominator) return NULL; snprintf (val, maxlen, "f/%.01f", pow (2 , ((float) v_rat.numerator / (float) v_rat.denominator) / 2.)); @@ -263,7 +264,7 @@ CF (e->format, EXIF_FORMAT_RATIONAL, val, maxlen); CC (e->components, 1, val, maxlen); v_rat = exif_get_rational (e->data, o); - if (!v_rat.denominator) return (NULL); + if (!v_rat.denominator) return NULL; /* * For calculation of the 35mm equivalent, @@ -290,15 +291,16 @@ (int) (d * (double) v_rat.numerator / (double) v_rat.denominator)); - snprintf (val, maxlen, "%.1f mm%s", - (float) v_rat.numerator / (float) v_rat.denominator, - b); + snprintf (val, maxlen, "%.1f mm", + (float) v_rat.numerator / (float) v_rat.denominator); + if (maxlen > strlen (val) + strlen (b)) + strncat (val, b, maxlen - strlen (val) - 1); break; case EXIF_TAG_SUBJECT_DISTANCE: CF (e->format, EXIF_FORMAT_RATIONAL, val, maxlen); CC (e->components, 1, val, maxlen); v_rat = exif_get_rational (e->data, o); - if (!v_rat.denominator) return (NULL); + if (!v_rat.denominator) return NULL; snprintf (val, maxlen, "%.1f m", (float) v_rat.numerator / (float) v_rat.denominator); break; @@ -306,23 +308,30 @@ CF (e->format, EXIF_FORMAT_RATIONAL, val, maxlen); CC (e->components, 1, val, maxlen); v_rat = exif_get_rational (e->data, o); - if (!v_rat.denominator) return (NULL); + if (!v_rat.denominator) return NULL; d = (double) v_rat.numerator / (double) v_rat.denominator; if (d < 1) - snprintf (val, maxlen, _("1/%d sec."), + snprintf (val, maxlen, _("1/%d"), (int) (1. / d)); else - snprintf (val, maxlen, _("%d sec."), (int) d); + snprintf (val, maxlen, _("%d"), (int) d); + if (maxlen > strlen (val) + strlen (" sec.")) + strncat (val, " sec.", maxlen - strlen (val) - 1); break; case EXIF_TAG_SHUTTER_SPEED_VALUE: CF (e->format, EXIF_FORMAT_SRATIONAL, val, maxlen); CC (e->components, 1, val, maxlen); v_srat = exif_get_srational (e->data, o); - if (!v_srat.denominator) return (NULL); - snprintf (val, maxlen, "%.0f/%.0f sec. (APEX: %i)", - (float) v_srat.numerator, (float) v_srat.denominator, - (int) pow (sqrt(2), (float) v_srat.numerator / - (float) v_srat.denominator)); + if (!v_srat.denominator) return NULL; + snprintf (val, maxlen, "%.0f/%.0f", (float) v_srat.numerator, + (float) v_srat.denominator); + if (maxlen > strlen (val) + strlen (" sec.")) + strncat (val, " sec.", maxlen - strlen (val) - 1); + snprintf (b, sizeof (b), " (APEX: %i)", + (int) pow (sqrt(2), (float) v_srat.numerator / + (float) v_srat.denominator)); + if (maxlen > strlen (val) + strlen (b)) + strncat (val, b, maxlen - strlen (val) - 1); break; case EXIF_TAG_BRIGHTNESS_VALUE: CF (e->format, EXIF_FORMAT_SRATIONAL, val, maxlen); @@ -337,14 +346,20 @@ CC (e->components, 1, val, maxlen); v_short = exif_get_short (e->data, o); switch (v_short) { - case 0: strncpy (val, _("Unknown"), maxlen); break; - case 1: strncpy (val, _("Average"), maxlen); break; - case 2: strncpy (val, _("Center-Weighted Average"), maxlen); break; - case 3: strncpy (val, _("Spot"), maxlen); break; - case 4: strncpy (val, _("Multi Spot"), maxlen); break; - case 5: strncpy (val, _("Pattern"), maxlen); break; - case 6: strncpy (val, _("Partial"), maxlen); break; - case 255: strncpy (val, _("Other"), maxlen); break; + case 0: strncpy (val, _("Unknown"), maxlen - 1); break; + case 1: strncpy (val, _("Average"), maxlen - 1); break; + case 2: + if (maxlen > strlen (_("Center-Weighted Average"))) + strncpy (val, _("Center-Weighted Average"), + maxlen - 1); + else + strncpy (val, _("Center-Weight"), maxlen - 1); + break; + case 3: strncpy (val, _("Spot"), maxlen - 1); break; + case 4: strncpy (val, _("Multi Spot"), maxlen - 1); break; + case 5: strncpy (val, _("Pattern"), maxlen - 1); break; + case 6: strncpy (val, _("Partial"), maxlen - 1); break; + case 255: strncpy (val, _("Other"), maxlen - 1); break; default: snprintf (val, maxlen, "%i", v_short); break; } break; @@ -390,8 +405,8 @@ case 6: c = _("B"); break; default: c = _("reserved"); break; } - strncat (val, c, maxlen - strlen(val)); - if (i < 3) strncat (val, " ", maxlen - strlen(val)); + strncat (val, c, maxlen - strlen (val)); + if (i < 3) strncat (val, " ", maxlen - strlen (val)); } break; case EXIF_TAG_SENSING_METHOD: @@ -424,39 +439,41 @@ CC (e->components, 1, val, maxlen); v_short = exif_get_short (e->data, o); switch (v_short) { - case 0: strncpy (val, _("Unknown"), maxlen); break; - case 1: strncpy (val, _("Daylight"), maxlen); break; - case 2: strncpy (val, _("Fluorescent"), maxlen); break; + case 0: strncpy (val, _("Unknown" ), maxlen - 1); break; + case 1: strncpy (val, _("Daylight" ), maxlen - 1); break; + case 2: strncpy (val, _("Fluorescent"), maxlen - 1); break; case 3: - strncpy (val, _("Tungsten (incandescent light)"), maxlen); + strncpy (val, _("Tungsten" ), maxlen - 1); + c = _(" (incandescent light)"); + if (maxlen > strlen (val) + strlen (c)) + strncat (val, c, maxlen - strlen (val) - 1); break; - case 4: strncpy (val, _("Flash"), maxlen); break; - case 9: strncpy (val, _("Fine weather"), maxlen); break; - case 10: strncpy (val, _("Cloudy weather"), maxlen); break; - case 11: strncpy (val, _("Shade"), maxlen); break; + case 4: strncpy (val, _("Flash" ), maxlen - 1); break; + case 9: strncpy (val, _("Fine weather" ), maxlen - 1); break; + case 10: strncpy (val, _("Cloudy weather"), maxlen - 1); break; + case 11: strncpy (val, _("Shade" ), maxlen - 1); break; case 12: - strncpy (val, _("Daylight fluorescent"), maxlen); + strncpy (val, _("Daylight fluorescent" ), maxlen - 1); break; case 13: - strncpy (val, _("Day white fluorescent"), maxlen); + strncpy (val, _("Day white fluorescent" ), maxlen - 1); break; case 14: - strncpy (val, _("Cool white fluorescent"), maxlen); + strncpy (val, _("Cool white fluorescent"), maxlen - 1); break; case 15: - strncpy (val, _("White fluorescent"), maxlen); + strncpy (val, _("White fluorescent" ), maxlen - 1); break; - case 17: - strncpy (val, _("Standard light A"), maxlen); break; - case 18: strncpy (val, _("Standard light B"), maxlen); break; - case 19: strncpy (val, _("Standard light C"), maxlen); break; - case 20: strncpy (val, _("D55"), maxlen); break; - case 21: strncpy (val, _("D65"), maxlen); break; - case 22: strncpy (val, _("D75"), maxlen); break; + case 17: strncpy (val, _("Standard light A"), maxlen-1); break; + case 18: strncpy (val, _("Standard light B"), maxlen-1); break; + case 19: strncpy (val, _("Standard light C"), maxlen-1); break; + case 20: strncpy (val, _("D55"), maxlen - 1); break; + case 21: strncpy (val, _("D65"), maxlen - 1); break; + case 22: strncpy (val, _("D75"), maxlen - 1); break; case 24: - strncpy (val, _("ISO studio tungsten"), maxlen); + strncpy (val, _("ISO studio tungsten"), maxlen - 1); break; - case 255: strncpy (val, _("Other"), maxlen); break; + case 255: strncpy (val, _("Other"), maxlen - 1); break; default: snprintf (val, maxlen, "%i", v_short); break; } break; @@ -466,8 +483,14 @@ CC (e->components, 1, val, maxlen); v_short = exif_get_short (e->data, o); switch (v_short) { - case 2: strncpy (val, _("Inch"), maxlen); break; - case 3: strncpy (val, _("Centimeter"), maxlen); break; + case 2: c = _("Inch"); + if (maxlen > strlen (c)) strncpy (val, c, maxlen - 1); + else strncpy (val, _("in"), maxlen - 1); + break; + case 3: c = _("Centimeter"); + if (maxlen > strlen (c)) strncpy (val, c, maxlen - 1); + else strncpy (val, _("cm"), maxlen - 1); + break; default: snprintf (val, maxlen, "%i", v_short); break; } break; @@ -476,28 +499,39 @@ CC (e->components, 1, val, maxlen); v_short = exif_get_short (e->data, o); switch (v_short) { - case 0: strncpy (val, _("Not defined"), maxlen); break; - case 1: strncpy (val, _("Manual"), maxlen); break; - case 2: strncpy (val, _("Normal program"), maxlen); break; - case 3: strncpy (val, _("Aperture priority"), maxlen); break; - case 4: strncpy (val, _("Shutter priority"), maxlen); break; - case 5: - strncpy (val, _("Creative program (biased toward " - "depth of field)"), maxlen); + case 0: strncpy (val, _("Not defined"), maxlen - 1); break; + case 1: strncpy (val, _("Manual"), maxlen - 1); break; + case 2: c = _("Normal program"); + if (maxlen > strlen (c)) strncpy (val, c, maxlen - 1); + else strncpy (val, _("Normal"), maxlen - 1); break; - case 6: - strncpy (val, _("Action program (biased toward " - "fast shutter speed)"), maxlen); + case 3: c = _("Aperture priority"); + if (maxlen > strlen (c)) strncpy (val, c, maxlen - 1); + else strncpy (val, _("Aperture"), maxlen - 1); break; - case 7: - strncpy (val, _("Portrait mode (for closeup photos " - "with the background out of focus"), - maxlen); + case 4: c = _("Shutter priority"); + if (maxlen > strlen (c)) strncpy (val, c, maxlen - 1); + else strncpy (val, _("Shutter"), maxlen - 1); break; - case 8: - strncpy (val, _("Landscape mode (for landscape " - "photos with the background in focus"), - maxlen); + case 5: c = _("Creative program (biased toward " + "depth of field)"); + if (maxlen > strlen (c)) strncpy (val, c, maxlen - 1); + else strncpy (val, _("Creative"), maxlen - 1); + break; + case 6: c = _("Action program (biased toward " + "fast shutter speed)"); + if (maxlen > strlen (c)) strncpy (val, c, maxlen - 1); + else strncpy (val, _("Action"), maxlen - 1); + break; + case 7: c = _("Portrait mode (for closeup photos " + "with the background out of focus"); + if (maxlen > strlen (c)) strncpy (val, c, maxlen - 1); + else strncpy (val, _("Portrait"), maxlen - 1); + break; + case 8: c = _("Landscape mode (for landscape " + "photos with the background in focus"); + if (maxlen > strlen (c)) strncpy (val, c, maxlen - 1); + else strncpy (val, _("Landscape"), maxlen - 1); break; default: snprintf (val, maxlen, "%i", v_short); break; } @@ -507,7 +541,7 @@ CC (e->components, 1, val, maxlen); v_srat = exif_get_srational (e->data, o); if (!v_srat.denominator) - return (NULL); + return NULL; snprintf (val, maxlen, "%s%.01f", v_srat.denominator * v_srat.numerator > 0 ? "+" : "", (double) v_srat.numerator / @@ -614,87 +648,94 @@ CC (e->components, 1, val, maxlen); v_short = exif_get_short (e->data, o); switch (v_short) { - case 0x000: + case 0x0000: strncpy (val, _("Flash did not fire."), maxlen); break; case 0x0001: - strncpy (val, _("Flash fired."), maxlen); + c = _("Flash fired."); + if (maxlen > strlen (c)) strncpy (val, c, maxlen - 1); + else strncpy (val, _("Yes"), maxlen - 1); break; case 0x0005: - strncpy (val, _("Strobe return light not detected."), maxlen); + c = _("Strobe return light not detected."); + if (maxlen > strlen (c)) strncpy (val, c, maxlen - 1); + else strncpy (val, _("W/o strobe"), maxlen - 1); break; case 0x0007: - strncpy (val, _("Strobe return light detected."), maxlen); + c = _("Strobe return light detected."); + if (maxlen > strlen (c)) strncpy (val, c, maxlen - 1); + else strncpy (val, _("W. strobe"), maxlen - 1); break; case 0x000d: strncpy (val, _("Flash fired, compulsory flash mode, " - "return light not detected."), maxlen); + "return light not detected."), maxlen - 1); break; case 0x000f: strncpy (val, _("Flash fired, compulsory flash mode, " - "return light detected."), maxlen); + "return light detected."), maxlen - 1); break; case 0x0010: strncpy (val, _("Flash did not fire, compulsory flash " - "mode."), maxlen); + "mode."), maxlen - 1); break; case 0x0018: - strncpy (val, _("Flash did not fire, auto mode."), maxlen); + strncpy (val, _("Flash did not fire, auto mode."), maxlen - 1); break; case 0x0019: - strncpy (val, _("Flash fired, auto mode."), maxlen); + strncpy (val, _("Flash fired, auto mode."), maxlen - 1); break; case 0x001d: strncpy (val, _("Flash fired, auto mode, return light " - "not detected."), maxlen); + "not detected."), maxlen - 1); break; case 0x001f: strncpy (val, _("Flash fired, auto mode, return light " - "detected."), maxlen); + "detected."), maxlen - 1); break; case 0x0020: - strncpy (val, _("No flash function."), maxlen); + strncpy (val, _("No flash function."), maxlen - 1); break; case 0x0041: - strncpy (val, _("Flash fired, red-eye reduction mode."), maxlen); + strncpy (val, _("Flash fired, red-eye reduction " + "mode."), maxlen - 1); break; case 0x0045: strncpy (val, _("Flash fired, red-eye reduction mode, " - "return light not detected."), maxlen); + "return light not detected."), maxlen - 1); break; case 0x0047: strncpy (val, _("Flash fired, red-eye reduction mode, " - "return light detected."), maxlen); + "return light detected."), maxlen - 1); break; case 0x0049: strncpy (val, _("Flash fired, compulsory flash mode, " - "red-eye reduction mode."), maxlen); + "red-eye reduction mode."), maxlen - 1); break; case 0x004d: strncpy (val, _("Flash fired, compulsory flash mode, " "red-eye reduction mode, return light not " - "detected."), maxlen); + "detected."), maxlen - 1); break; case 0x004f: strncpy (val, _("Flash fired, compulsory flash mode, " "red-eye reduction mode, return light " - "detected."), maxlen); + "detected."), maxlen - 1); break; case 0x0059: strncpy (val, _("Flash fired, auto mode, red-eye " - "reduction mode."), maxlen); + "reduction mode."), maxlen - 1); break; case 0x005d: strncpy (val, _("Flash fired, auto mode, return light " - "not detected, red-eye reduction mode."), maxlen); + "not detected, red-eye reduction mode."), + maxlen - 1); break; case 0x005f: strncpy (val, _("Flash fired, auto mode, return light " - "detected, red-eye reduction mode."), maxlen); - break; - default: - snprintf (val, maxlen, "%i", v_short); + "detected, red-eye reduction mode."), + maxlen - 1); break; + default: snprintf (val, maxlen, "%i", v_short); break; } break; case EXIF_TAG_MAKER_NOTE: @@ -708,10 +749,10 @@ v_short = exif_get_short (e->data, o); switch (v_short) { case 0: - strncpy (val, _("Normal process"), maxlen); + strncpy (val, _("Normal process"), maxlen - 1); break; case 1: - strncpy (val, _("Custom process"), maxlen); + strncpy (val, _("Custom process"), maxlen - 1); break; default: snprintf (val, maxlen, "%i", v_short); @@ -724,13 +765,13 @@ v_short = exif_get_short (e->data, o); switch (v_short) { case 0: - strncpy (val, _("Auto exposure"), maxlen); + strncpy (val, _("Auto exposure"), maxlen - 1); break; case 1: - strncpy (val, _("Manual exposure"), maxlen); + strncpy (val, _("Manual exposure"), maxlen - 1); break; case 2: - strncpy (val, _("Auto bracket"), maxlen); + strncpy (val, _("Auto bracket"), maxlen - 1); break; default: snprintf (val, maxlen, "%i", v_short); @@ -743,10 +784,10 @@ v_short = exif_get_short (e->data, o); switch (v_short) { case 0: - strncpy (val, _("Auto white balance"), maxlen); + strncpy (val, _("Auto white balance"), maxlen - 1); break; case 1: - strncpy (val, _("Manual white balance"), maxlen); + strncpy (val, _("Manual white balance"), maxlen - 1); break; default: snprintf (val, maxlen, "%i", v_short); @@ -758,21 +799,11 @@ CC (e->components, 1, val, maxlen); v_short = exif_get_short (e->data, o); switch (v_short) { - case 0: - strncpy (val, _("Standard"), maxlen); - break; - case 1: - strncpy (val, _("Landscape"), maxlen); - break; - case 2: - strncpy (val, _("Portrait"), maxlen); - break; - case 3: - strncpy (val, _("Night scene"), maxlen); - break; - default: - snprintf (val, maxlen, "%i", v_short); - break; + case 0: strncpy (val, _("Standard" ), maxlen - 1); break; + case 1: strncpy (val, _("Landscape" ), maxlen - 1); break; + case 2: strncpy (val, _("Portrait" ), maxlen - 1); break; + case 3: strncpy (val, _("Night scene"), maxlen - 1); break; + default: snprintf (val, maxlen, "%i", v_short); break; } break; case EXIF_TAG_GAIN_CONTROL: @@ -780,24 +811,12 @@ CC (e->components, 1, val, maxlen); v_short = exif_get_short (e->data, o); switch (v_short) { - case 0: - strncpy (val, _("Normal"), maxlen); - break; - case 1: - strncpy (val, _("Low gain up"), maxlen); - break; - case 2: - strncpy (val, _("High gain up"), maxlen); - break; - case 3: - strncpy (val, _("Low gain down"), maxlen); - break; - case 4: - strncpy (val, _("High gain down"), maxlen); - break; - default: - snprintf (val, maxlen, "%i", v_short); - break; + case 0: strncpy (val, _("Normal" ), maxlen - 1); break; + case 1: strncpy (val, _("Low gain up" ), maxlen - 1); break; + case 2: strncpy (val, _("High gain up" ), maxlen - 1); break; + case 3: strncpy (val, _("Low gain down" ), maxlen - 1); break; + case 4: strncpy (val, _("High gain down"), maxlen - 1); break; + default: snprintf (val, maxlen, "%i", v_short); break; } break; case EXIF_TAG_SATURATION: @@ -805,18 +824,10 @@ CC (e->components, 1, val, maxlen); v_short = exif_get_short (e->data, o); switch (v_short) { - case 0: - strncpy (val, _("Normal"), maxlen); - break; - case 1: - strncpy (val, _("Low saturation"), maxlen); - break; - case 2: - strncpy (val, _("High saturation"), maxlen); - break; - default: - snprintf (val, maxlen, "%i", v_short); - break; + case 0: strncpy (val, _("Normal" ), maxlen - 1); break; + case 1: strncpy (val, _("Low saturation" ), maxlen - 1); break; + case 2: strncpy (val, _("High saturation"), maxlen - 1); break; + default: snprintf (val, maxlen, "%i", v_short); break; } break; case EXIF_TAG_CONTRAST: @@ -825,18 +836,10 @@ CC (e->components, 1, val, maxlen); v_short = exif_get_short (e->data, o); switch (v_short) { - case 0: - strncpy (val, _("Normal"), maxlen); - break; - case 1: - strncpy (val, _("Soft"), maxlen); - break; - case 2: - strncpy (val, _("Hard"), maxlen); - break; - default: - snprintf (val, maxlen, "%i", v_short); - break; + case 0: strncpy (val, _("Normal"), maxlen - 1); break; + case 1: strncpy (val, _("Soft" ), maxlen - 1); break; + case 2: strncpy (val, _("Hard" ), maxlen - 1); break; + default: snprintf (val, maxlen, "%i", v_short); break; } break; case EXIF_TAG_SUBJECT_DISTANCE_RANGE: @@ -844,21 +847,11 @@ CC (e->components, 1, val, maxlen); v_short = exif_get_short (e->data, o); switch (v_short) { - case 0: - strncpy (val, _("Unknown"), maxlen); - break; - case 1: - strncpy (val, _("Macro"), maxlen); - break; - case 2: - strncpy (val, _("Close view"), maxlen); - break; - case 3: - strncpy (val, _("Distant view"), maxlen); - break; - default: - snprintf (val, maxlen, "%i", v_short); - break; + case 0: strncpy (val, _("Unknown" ), maxlen - 1); break; + case 1: strncpy (val, _("Macro" ), maxlen - 1); break; + case 2: strncpy (val, _("Close view" ), maxlen - 1); break; + case 3: strncpy (val, _("Distant view"), maxlen - 1); break; + default: snprintf (val, maxlen, "%i", v_short); break; } break; case EXIF_TAG_SUBJECT_AREA: @@ -902,12 +895,12 @@ case EXIF_FORMAT_SBYTE: v_byte = e->data[0]; snprintf (val, maxlen, "0x%02x", v_byte); - maxlen -= strlen(val); + maxlen -= strlen (val); for (i = 1; i < e->components; i++) { v_byte = e->data[i]; snprintf (b, sizeof (b), ", 0x%02x", v_byte); strncat (val, b, maxlen); - maxlen -= strlen(b); + maxlen -= strlen (b); if ((signed)maxlen <= 0) break; } break; @@ -915,42 +908,42 @@ case EXIF_FORMAT_SSHORT: v_short = exif_get_short (e->data, o); snprintf (val, maxlen, "%i", v_short); - maxlen -= strlen(val); + maxlen -= strlen (val); for (i = 1; i < e->components; i++) { v_short = exif_get_short (e->data + exif_format_get_size (e->format) * i, o); snprintf (b, sizeof (b), ", %i", v_short); strncat (val, b, maxlen); - maxlen -= strlen(b); + maxlen -= strlen (b); if ((signed)maxlen <= 0) break; } break; case EXIF_FORMAT_LONG: v_long = exif_get_long (e->data, o); snprintf (val, maxlen, "%i", (int) v_long); - maxlen -= strlen(val); + maxlen -= strlen (val); for (i = 1; i < e->components; i++) { v_long = exif_get_long (e->data + exif_format_get_size (e->format) * i, o); snprintf (b, sizeof (b), ", %li", v_long); strncat (val, b, maxlen); - maxlen -= strlen(b); + maxlen -= strlen (b); if ((signed)maxlen <= 0) break; } break; case EXIF_FORMAT_SLONG: v_slong = exif_get_slong (e->data, o); snprintf (val, maxlen, "%li", v_slong); - maxlen -= strlen(val); + maxlen -= strlen (val); for (i = 1; i < e->components; i++) { v_long = exif_get_slong (e->data + exif_format_get_size (e->format) * i, o); snprintf (b, sizeof (b), ", %li", v_long); strncat (val, b, maxlen); - maxlen -= strlen(b); + maxlen -= strlen (b); if ((signed)maxlen <= 0) break; } break; @@ -962,7 +955,7 @@ snprintf (val, maxlen, "%i/%i", (int) v_rat.numerator, (int) v_rat.denominator); - maxlen -= strlen(val); + maxlen -= strlen (val); for (i = 1; i < e->components; i++) { v_rat = exif_get_rational ( e->data + 8 * i, o); @@ -970,7 +963,7 @@ (int) v_rat.numerator, (int) v_rat.denominator); strncat (val, b, maxlen); - maxlen -= strlen(b); + maxlen -= strlen (b); if ((signed)maxlen <= 0) break; } break; @@ -979,7 +972,7 @@ snprintf (val, maxlen, "%i/%i", (int) v_srat.numerator, (int) v_srat.denominator); - maxlen -= strlen(val); + maxlen -= strlen (val); for (i = 1; i < e->components; i++) { v_srat = exif_get_srational ( e->data + 8 * i, o); @@ -987,8 +980,8 @@ (int) v_srat.numerator, (int) v_srat.denominator); strncat (val, b, maxlen); - maxlen -= strlen(b); - if ((signed)maxlen <= 0) break; + maxlen -= strlen (b); + if ((signed) maxlen <= 0) break; } break; case EXIF_FORMAT_DOUBLE: @@ -999,210 +992,7 @@ } } - return (val); -} - -const char * -exif_entry_get_value_brief (ExifEntry *e, char *val, unsigned int maxlen) -{ - ExifByteOrder o; - ExifEntry *entry; - ExifRational v_rat; - ExifSRational v_srat; - ExifShort v_short; - double d; - - /* We need the byte order */ - if (!e || !e->parent || !e->parent->parent) - return (NULL); - o = exif_data_get_byte_order (e->parent->parent); - - memset (val, 0, maxlen); - maxlen--; - - switch (e->tag) { - case EXIF_TAG_FOCAL_LENGTH: - CF (e->format, EXIF_FORMAT_RATIONAL, val, maxlen); - CC (e->components, 1, val, maxlen); - v_rat = exif_get_rational (e->data, o); - if (!v_rat.denominator) - return (NULL); - - /* - * For calculation of the 35mm equivalent, - * Minolta cameras need a multiplier that depends on the - * camera model. - */ - d = (double) v_rat.numerator / (double) v_rat.denominator; - entry = exif_content_get_entry ( - e->parent->parent->ifd[EXIF_IFD_0], EXIF_TAG_MAKE); - if (entry && entry->data && - !strncmp (entry->data, "Minolta", 7)) { - entry = exif_content_get_entry ( - e->parent->parent->ifd[EXIF_IFD_0], - EXIF_TAG_MODEL); - if (entry && entry->data) { - if (!strncmp (entry->data, "DiMAGE 7", 8)) - d *= 3.9; - else if (!strncmp (entry->data, "DiMAGE 5", 8)) - d *= 4.9; - } - } - snprintf (val, maxlen, "%dmm", - (int) (d * (double) v_rat.numerator / - (double) v_rat.denominator)); - break; - case EXIF_TAG_EXPOSURE_TIME: - CF (e->format, EXIF_FORMAT_RATIONAL, val, maxlen); - CC (e->components, 1, val, maxlen); - v_rat = exif_get_rational (e->data, o); - if (!v_rat.denominator) - return (NULL); - d = (double) v_rat.numerator / (double) v_rat.denominator; - if (d < 1.) - snprintf (val, maxlen, "1/%d", (int) (1. / d)); - else - snprintf (val, maxlen, "%d", (int) d); - break; - case EXIF_TAG_SHUTTER_SPEED_VALUE: - CF (e->format, EXIF_FORMAT_SRATIONAL, val, maxlen); - CC (e->components, 1, val, maxlen); - v_srat = exif_get_srational (e->data, o); - if (!v_srat.denominator) - return (NULL); - d = 1. / pow (2., (double) v_srat.numerator / - (double) v_srat.denominator); - if (d < 1.) - snprintf (val, maxlen, "1/%d", (int) (1. / d)); - else - snprintf (val, maxlen, "%d", (int) d); - break; - case EXIF_TAG_METERING_MODE: - CF (e->format, EXIF_FORMAT_SHORT, val, maxlen); - CC (e->components, 1, val, maxlen); - v_short = exif_get_short (e->data, o); - switch (v_short) { - case 0: - strncpy (val, _("unknown"), maxlen); - break; - case 1: - strncpy (val, _("average"), maxlen); - break; - case 2: - strncpy (val, _("center-weight"), maxlen); - break; - case 3: - strncpy (val, _("spot"), maxlen); - break; - case 4: - strncpy (val, _("multi-spot"), maxlen); - break; - case 5: - strncpy (val, _("matrix"), maxlen); - break; - case 6: - strncpy (val, _("partial"), maxlen); - break; - case 255: - strncpy (val, _("other"), maxlen); - break; - default: - snprintf (val, maxlen, "%i", v_short); - break; - } - break; - case EXIF_TAG_LIGHT_SOURCE: - CF (e->format, EXIF_FORMAT_SHORT, val, maxlen); - CC (e->components, 1, val, maxlen); - v_short = exif_get_short (e->data, o); - switch (v_short) { - case 0: - strncpy (val, _("sunny"), maxlen); - break; - case 1: - strncpy (val, _("fluorescent"), maxlen); - break; - case 2: - strncpy (val, _("tungsten"), maxlen); - break; - case 3: - strncpy (val, _("cloudy"), maxlen); - break; - default: - return (exif_entry_get_value (e, val, maxlen)); - } - break; - case EXIF_TAG_RESOLUTION_UNIT: - CF (e->format, EXIF_FORMAT_SHORT, val, maxlen); - CC (e->components, 1, val, maxlen); - v_short = exif_get_short (e->data, o); - switch (v_short) { - case 2: - strncpy (val, _("in"), maxlen); - break; - case 3: - strncpy (val, _("cm"), maxlen); - break; - default: - return (NULL); - } - break; - case EXIF_TAG_EXPOSURE_PROGRAM: - CF (e->format, EXIF_FORMAT_SHORT, val, maxlen); - CC (e->components, 1, val, maxlen); - v_short = exif_get_short (e->data, o); - switch (v_short) { - case 1: - strncpy (val, _("manual"), maxlen); - break; - case 2: - strncpy (val, _("normal"), maxlen); - break; - case 3: - strncpy (val, _("aperture"), maxlen); - break; - case 4: - strncpy (val, _("shutter"), maxlen); - break; - case 5: - strncpy (val, _("creative"), maxlen); - break; - case 6: - strncpy (val, _("action"), maxlen); - break; - case 7: - strncpy (val, _("portrait"), maxlen); - break; - case 8: - strncpy (val, _("landscape"), maxlen); - break; - default: - return (exif_entry_get_value (e, val, maxlen)); - } - break; - case EXIF_TAG_FLASH: - CF (e->format, EXIF_FORMAT_SHORT, val, maxlen); - CC (e->components, 1, val, maxlen); - v_short = exif_get_short (e->data, o); - switch (v_short) { - case 0x0001: - strncpy (val, _("yes"), maxlen); - break; - case 0x0005: - strncpy (val, _("w/o strobe"), maxlen); - break; - case 0x0007: - strncpy (val, _("w. strobe"), maxlen); - break; - default: - return (exif_entry_get_value (e, val, maxlen)); - } - break; - default: - return (exif_entry_get_value (e, val, maxlen)); - } - - return (val); + return strlen (val) ? val : NULL; } void |
From: Lutz M?l. <lu...@us...> - 2004-01-07 23:36:19
|
Update of /cvsroot/libexif/libexif/test In directory sc8-pr-cvs1:/tmp/cvs-serv22394/test Modified Files: Makefile.am test-mnote.c Log Message: 2004-01-08 Lutz Mueller <lu...@us...> * libexif/exif-entry.c (exif_entry_get_value_brief): merge into (exif_entry_get_value) and remove. * tests/test-mnote.c: Make it compile again. * tests/test-value.c: New. * configure.in: API-changes -> increment version. Index: test-mnote.c =================================================================== RCS file: /cvsroot/libexif/libexif/test/test-mnote.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- test-mnote.c 27 Oct 2003 22:34:30 -0000 1.3 +++ test-mnote.c 7 Jan 2004 23:36:16 -0000 1.4 @@ -9,7 +9,7 @@ test_exif_data (ExifData *d) { unsigned int i, c; - char *v; + char v[1024], *p; ExifMnoteData *md; fprintf (stdout, "Byte order: %s\n", @@ -40,11 +40,8 @@ exif_mnote_data_get_title (md, i)); fprintf (stdout, " Description: '%s'\n", exif_mnote_data_get_description (md, i)); - v = exif_mnote_data_get_value (md, i); - if (v) { - fprintf (stdout, " Value: '%s'\n", v); - free (v); - } + p = exif_mnote_data_get_value (md, i, v, sizeof (v)); + if (p) { fprintf (stdout, " Value: '%s'\n", v); } } return 0; Index: Makefile.am =================================================================== RCS file: /cvsroot/libexif/libexif/test/Makefile.am,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- Makefile.am 27 Oct 2003 22:46:08 -0000 1.9 +++ Makefile.am 7 Jan 2004 23:36:16 -0000 1.10 @@ -3,8 +3,9 @@ -I$(top_srcdir)intl \ -I$(top_srcdir) -noinst_PROGRAMS = test-mem test-tree test-mnote +noinst_PROGRAMS = test-mem test-tree test-mnote test-value test_tree_LDADD = $(top_builddir)/libjpeg/libjpeg.la $(top_builddir)/libexif/libexif.la $(INTLLIBS) -test_mem_LDADD = $(top_builddir)/libexif/libexif.la $(INTLLIBS) +test_mem_LDADD = $(top_builddir)/libexif/libexif.la $(INTLLIBS) test_mnote_LDADD = $(top_builddir)/libexif/libexif.la $(INTLLIBS) +test_value_LDADD = $(top_builddir)/libexif/libexif.la $(INTLLIBS) |
From: Lutz M?l. <lu...@us...> - 2004-01-07 23:36:19
|
Update of /cvsroot/libexif/libexif In directory sc8-pr-cvs1:/tmp/cvs-serv22394 Modified Files: ChangeLog Makefile.am configure.in Log Message: 2004-01-08 Lutz Mueller <lu...@us...> * libexif/exif-entry.c (exif_entry_get_value_brief): merge into (exif_entry_get_value) and remove. * tests/test-mnote.c: Make it compile again. * tests/test-value.c: New. * configure.in: API-changes -> increment version. Index: configure.in =================================================================== RCS file: /cvsroot/libexif/libexif/configure.in,v retrieving revision 1.58 retrieving revision 1.59 diff -u -d -r1.58 -r1.59 --- configure.in 27 Oct 2003 17:31:14 -0000 1.58 +++ configure.in 7 Jan 2004 23:36:16 -0000 1.59 @@ -1,7 +1,7 @@ AC_PREREQ(2.50) AC_INIT(libexif/exif-data.h) AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(libexif, 0.5.12) +AM_INIT_AUTOMAKE(libexif, 0.5.13) AM_MAINTAINER_MODE dnl --------------------------------------------------------------------------- @@ -14,9 +14,9 @@ dnl - CURRENT (Major): Increment if the interface has additions, changes, dnl removals. dnl --------------------------------------------------------------------------- -LIBEXIF_AGE=2 -LIBEXIF_REVISION=1 -LIBEXIF_CURRENT=9 +LIBEXIF_AGE=0 +LIBEXIF_REVISION=0 +LIBEXIF_CURRENT=10 AC_SUBST(LIBEXIF_AGE) AC_SUBST(LIBEXIF_REVISION) AC_SUBST(LIBEXIF_CURRENT) @@ -63,6 +63,7 @@ libjpeg/Makefile test/Makefile libexif/libexif.pc + po/Makefile.in ]) echo " Index: Makefile.am =================================================================== RCS file: /cvsroot/libexif/libexif/Makefile.am,v retrieving revision 1.25 retrieving revision 1.26 diff -u -d -r1.25 -r1.26 --- Makefile.am 27 Oct 2003 17:32:32 -0000 1.25 +++ Makefile.am 7 Jan 2004 23:36:16 -0000 1.26 @@ -1,3 +1,5 @@ -SUBDIRS = libexif libjpeg test po +SUBDIRS = libexif libjpeg test intl po EXTRA_DIST = @PACKAGE@.spec + +ACLOCAL_AMFLAGS = -I m4 Index: ChangeLog =================================================================== RCS file: /cvsroot/libexif/libexif/ChangeLog,v retrieving revision 1.92 retrieving revision 1.93 diff -u -d -r1.92 -r1.93 --- ChangeLog 7 Jan 2004 15:21:49 -0000 1.92 +++ ChangeLog 7 Jan 2004 23:36:16 -0000 1.93 @@ -1,3 +1,11 @@ +2004-01-08 Lutz Mueller <lu...@us...> + + * libexif/exif-entry.c (exif_entry_get_value_brief): merge into + (exif_entry_get_value) and remove. + * tests/test-mnote.c: Make it compile again. + * tests/test-value.c: New. + * configure.in: API-changes -> increment version. + 2004-01-07 Jan Patera <pa...@us...> Thread-safety, elimination of static variables, fixes of memory |
From: Jan P. <pa...@us...> - 2004-01-07 15:27:05
|
Update of /cvsroot/libexif/exif/libjpeg In directory sc8-pr-cvs1:/tmp/cvs-serv807 Modified Files: jpeg-data.c jpeg-marker.h Log Message: Transfer of changes from libexif/libjpeg: jpeg-marker.h: extern "C" if __cplusplus defined jpeg-data.c: unistd.h not included; unlink() -> remove() Index: jpeg-marker.h =================================================================== RCS file: /cvsroot/libexif/exif/libjpeg/jpeg-marker.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- jpeg-marker.h 15 Dec 2002 11:39:13 -0000 1.2 +++ jpeg-marker.h 7 Jan 2004 15:27:02 -0000 1.3 @@ -20,6 +20,10 @@ #ifndef __JPEG_MARKER_H__ #define __JPEG_MARKER_H__ +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + typedef enum _JPEGMarker JPEGMarker; enum _JPEGMarker { JPEG_MARKER_SOF0 = 0xc0, @@ -92,5 +96,9 @@ const char *jpeg_marker_get_name (JPEGMarker marker); const char *jpeg_marker_get_description (JPEGMarker marker); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ #endif /* __JPEG_MARKER_H__ */ Index: jpeg-data.c =================================================================== RCS file: /cvsroot/libexif/exif/libjpeg/jpeg-data.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- jpeg-data.c 28 Sep 2003 18:01:00 -0000 1.8 +++ jpeg-data.c 7 Jan 2004 15:27:02 -0000 1.9 @@ -23,7 +23,6 @@ #include <stdlib.h> #include <stdio.h> -#include <unistd.h> #include <string.h> /* #define DEBUG */ @@ -81,7 +80,7 @@ if (!d) return; - unlink (path); + remove (path); f = fopen (path, "wb"); if (!f) { free (d); |
From: Jan P. <pa...@us...> - 2004-01-07 15:21:59
|
Update of /cvsroot/libexif/libexif In directory sc8-pr-cvs1:/tmp/cvs-serv32444 Modified Files: ChangeLog Log Message: 2004-01-07 Jan Patera <pa...@us...> Thread-safety, elimination of static variables, fixes of memory corruption (writing beyond provided space), no more memory leaks in mnote, 2 new args of exif_entry_get_value, exif_entry_get_value_brief, exif_mnote_data_get_value. * libexif, libexif/canon, libexif/olympus, libexif/pentax Index: ChangeLog =================================================================== RCS file: /cvsroot/libexif/libexif/ChangeLog,v retrieving revision 1.91 retrieving revision 1.92 diff -u -d -r1.91 -r1.92 --- ChangeLog 9 Dec 2003 19:49:59 -0000 1.91 +++ ChangeLog 7 Jan 2004 15:21:49 -0000 1.92 @@ -1,3 +1,12 @@ +2004-01-07 Jan Patera <pa...@us...> + + Thread-safety, elimination of static variables, fixes of memory + corruption (writing beyond provided space), no more memory leaks + in mnote, 2 new args of exif_entry_get_value, + exif_entry_get_value_brief, exif_mnote_data_get_value. + + * libexif, libexif/canon, libexif/olympus, libexif/pentax + 2003-12-09 Lutz Mueller <lu...@us...> A couple of fixes by Jan Patera <pa...@pi...>: |
From: Jan P. <pa...@us...> - 2004-01-07 15:17:02
|
Update of /cvsroot/libexif/libexif/libexif In directory sc8-pr-cvs1:/tmp/cvs-serv31210 Modified Files: exif-entry.c Log Message: EXIF_TAG_COMPONENTS_CONFIGURATION, EXIF_TAG_COPYRIGHT: do not write beyond provided space in val: 3arg of every strncat() fixed Index: exif-entry.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-entry.c,v retrieving revision 1.43 retrieving revision 1.44 diff -u -d -r1.43 -r1.44 --- exif-entry.c 7 Jan 2004 15:12:12 -0000 1.43 +++ exif-entry.c 7 Jan 2004 15:16:59 -0000 1.44 @@ -227,19 +227,19 @@ strncpy (val, e->data, MIN (maxlen, e->size)); else strncpy (val, _("[None]"), maxlen); - strncat (val, " ", maxlen); - strncat (val, _("(Photographer)"), maxlen); + strncat (val, " ", maxlen - strlen(val)); + strncat (val, _("(Photographer)"), maxlen - strlen(val)); /* Second part: Editor. */ - strncat (val, " - ", maxlen); + strncat (val, " - ", maxlen - strlen(val)); if (e->size && e->data && (strlen ((char *) e->data) + 1 < e->size) && (strspn (e->data, " ") != strlen ((char *) e->data))) - strncat (val, e->data + strlen (e->data) + 1, maxlen); + strncat (val, e->data + strlen (e->data) + 1, maxlen - strlen(val)); else - strncat (val, _("[None]"), maxlen); - strncat (val, " ", maxlen); - strncat (val, _("(Editor)"), maxlen); + strncat (val, _("[None]"), maxlen - strlen(val)); + strncat (val, " ", maxlen - strlen(val)); + strncat (val, _("(Editor)"), maxlen - strlen(val)); break; case EXIF_TAG_FNUMBER: @@ -390,8 +390,8 @@ case 6: c = _("B"); break; default: c = _("reserved"); break; } - strncat (val, c, maxlen); - if (i < 3) strncat (val, " ", maxlen); + strncat (val, c, maxlen - strlen(val)); + if (i < 3) strncat (val, " ", maxlen - strlen(val)); } break; case EXIF_TAG_SENSING_METHOD: |
Update of /cvsroot/libexif/libexif/libexif In directory sc8-pr-cvs1:/tmp/cvs-serv29825 Modified Files: exif-content.h exif-data.c exif-entry.c exif-entry.h exif-mnote-data-priv.h exif-mnote-data.c exif-mnote-data.h Log Message: 1) Two new arguments (char *val, unsinged int maxlen) added to the following functions and macros: exif_entry_get_value exif_entry_get_value_brief exif_mnote_data_get_value exif_mnote_data_pentax_get_value macros: exif_content_get_value exif_content_get_value_brief The functions return either NULL (in case of error) or val. 2) All static variables eliminated. 3) memset(val, 0, maxlen); is in all functions, followed by maxlen--; which ensures all returned strings will always be NULL-terminated. All this should make the library thread-safe. Index: exif-content.h =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-content.h,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- exif-content.h 15 Dec 2002 11:41:11 -0000 1.7 +++ exif-content.h 7 Jan 2004 15:12:11 -0000 1.8 @@ -59,12 +59,12 @@ void *user_data); /* For your convenience */ -#define exif_content_get_value(c,t) \ +#define exif_content_get_value(c,t,v,m) \ (exif_content_get_entry (c,t) ? \ - exif_entry_get_value (exif_content_get_entry (c,t)) : NULL) -#define exif_content_get_value_brief(c,t) \ + exif_entry_get_value (exif_content_get_entry (c,t),v,m) : NULL) +#define exif_content_get_value_brief(c,t,v,m) \ (exif_content_get_entry (c,t) ? \ - exif_entry_get_value_brief (exif_content_get_entry (c,t)) : NULL) + exif_entry_get_value_brief (exif_content_get_entry (c,t),v,m) : NULL) void exif_content_dump (ExifContent *content, unsigned int indent); Index: exif-mnote-data-priv.h =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-mnote-data-priv.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- exif-mnote-data-priv.h 27 Oct 2003 22:34:29 -0000 1.3 +++ exif-mnote-data-priv.h 7 Jan 2004 15:12:12 -0000 1.4 @@ -45,7 +45,7 @@ const char * (* get_name) (ExifMnoteData *, unsigned int); const char * (* get_title) (ExifMnoteData *, unsigned int); const char * (* get_description) (ExifMnoteData *, unsigned int); - char * (* get_value) (ExifMnoteData *, unsigned int); + char * (* get_value) (ExifMnoteData *, unsigned int, char *val, unsigned int maxlen); }; typedef struct _ExifMnoteDataPriv ExifMnoteDataPriv; Index: exif-mnote-data.h =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-mnote-data.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- exif-mnote-data.h 26 Oct 2003 10:06:17 -0000 1.1 +++ exif-mnote-data.h 7 Jan 2004 15:12:12 -0000 1.2 @@ -39,8 +39,8 @@ const char *exif_mnote_data_get_title (ExifMnoteData *, unsigned int); const char *exif_mnote_data_get_description (ExifMnoteData *, unsigned int); -/* Free the result! */ -char *exif_mnote_data_get_value (ExifMnoteData *, unsigned int); +/* Returns NULL or val */ +char *exif_mnote_data_get_value (ExifMnoteData *, unsigned int, char *val, unsigned int maxlen); #ifdef __cplusplus } Index: exif-entry.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-entry.c,v retrieving revision 1.42 retrieving revision 1.43 diff -u -d -r1.42 -r1.43 --- exif-entry.c 9 Dec 2003 19:49:59 -0000 1.42 +++ exif-entry.c 7 Jan 2004 15:12:12 -0000 1.43 @@ -35,8 +35,6 @@ #undef MIN #define MIN(a, b) (((a) < (b)) ? (a) : (b)) -static const unsigned char ExifHeader[] = {0x45, 0x78, 0x69, 0x66, 0x00, 0x00}; - struct _ExifEntryPrivate { unsigned int ref_count; @@ -98,6 +96,7 @@ exif_entry_dump (ExifEntry *e, unsigned int indent) { [...1370 lines suppressed...] break; case 0x0007: - strncpy (v, _("w. strobe"), sizeof (v)); + strncpy (val, _("w. strobe"), maxlen); break; default: - return (exif_entry_get_value (e)); + return (exif_entry_get_value (e, val, maxlen)); } break; default: - return (exif_entry_get_value (e)); + return (exif_entry_get_value (e, val, maxlen)); } - return (v); + return (val); } void Index: exif-entry.h =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-entry.h,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- exif-entry.h 15 Dec 2002 11:41:11 -0000 1.8 +++ exif-entry.h 7 Jan 2004 15:12:12 -0000 1.9 @@ -54,8 +54,8 @@ void exif_entry_initialize (ExifEntry *entry, ExifTag tag); /* For your convenience */ -const char *exif_entry_get_value (ExifEntry *entry); -const char *exif_entry_get_value_brief (ExifEntry *entry); +const char *exif_entry_get_value (ExifEntry *entry, char *val, unsigned int maxlen); +const char *exif_entry_get_value_brief (ExifEntry *entry, char *val, unsigned int maxlen); void exif_entry_dump (ExifEntry *entry, unsigned int indent); Index: exif-data.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-data.c,v retrieving revision 1.34 retrieving revision 1.35 diff -u -d -r1.34 -r1.35 --- exif-data.c 1 Dec 2003 18:09:28 -0000 1.34 +++ exif-data.c 7 Jan 2004 15:12:11 -0000 1.35 @@ -665,9 +665,10 @@ else { em = exif_data_get_entry (data, EXIF_TAG_MAKE); if (em) { + char value[7]; /* Canon */ - if (!strcmp (exif_entry_get_value (em), "Canon")) + if (!strcmp (exif_entry_get_value (em, value, sizeof(value)), "Canon")) data->priv->md = exif_mnote_data_canon_new (); } } @@ -749,7 +750,7 @@ loader = exif_loader_new (); while (1) { - size = fread (data, 1, 1024, f); + size = fread (data, 1, sizeof (data), f); if (size <= 0) break; if (!exif_loader_write (loader, data, size)) break; } Index: exif-mnote-data.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-mnote-data.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- exif-mnote-data.c 27 Oct 2003 20:07:11 -0000 1.3 +++ exif-mnote-data.c 7 Jan 2004 15:12:12 -0000 1.4 @@ -128,8 +128,8 @@ } char * -exif_mnote_data_get_value (ExifMnoteData *d, unsigned int n) +exif_mnote_data_get_value (ExifMnoteData *d, unsigned int n, char *val, unsigned int maxlen) { if (!d || !d->methods.get_value) return NULL; - return d->methods.get_value (d, n); + return d->methods.get_value (d, n, val, maxlen); } |
From: Jan P. <pa...@us...> - 2004-01-07 15:01:42
|
Update of /cvsroot/libexif/libexif/libexif/pentax In directory sc8-pr-cvs1:/tmp/cvs-serv28454 Modified Files: exif-mnote-data-pentax.c mnote-pentax-entry.c mnote-pentax-entry.h Log Message: exif_mnote_data_pentax_get_value(), mnote_pentax_entry_get_value(): 1) 2 new args: val & maxlen 2) no static variables Index: mnote-pentax-entry.h =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/pentax/mnote-pentax-entry.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- mnote-pentax-entry.h 26 Oct 2003 10:06:17 -0000 1.1 +++ mnote-pentax-entry.h 7 Jan 2004 15:01:39 -0000 1.2 @@ -38,6 +38,6 @@ ExifByteOrder order; }; -char *mnote_pentax_entry_get_value (MnotePentaxEntry *entry); +char *mnote_pentax_entry_get_value (MnotePentaxEntry *entry, char *val, unsigned int maxlen); #endif /* __MNOTE_PENTAX_ENTRY_H__ */ Index: exif-mnote-data-pentax.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/pentax/exif-mnote-data-pentax.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- exif-mnote-data-pentax.c 30 Oct 2003 22:10:45 -0000 1.3 +++ exif-mnote-data-pentax.c 7 Jan 2004 15:01:39 -0000 1.4 @@ -58,13 +58,13 @@ } static char * -exif_mnote_data_pentax_get_value (ExifMnoteData *d, unsigned int i) +exif_mnote_data_pentax_get_value (ExifMnoteData *d, unsigned int i, char *val, unsigned int maxlen) { ExifMnoteDataPentax *n = (ExifMnoteDataPentax *) d; if (!n) return NULL; if (n->count >= i) return NULL; - return mnote_pentax_entry_get_value (&n->entries[i]); + return mnote_pentax_entry_get_value (&n->entries[i], val, maxlen); } static void Index: mnote-pentax-entry.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/pentax/mnote-pentax-entry.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- mnote-pentax-entry.c 26 Oct 2003 10:06:17 -0000 1.1 +++ mnote-pentax-entry.c 7 Jan 2004 15:01:39 -0000 1.2 @@ -30,37 +30,11 @@ #include <libexif/exif-format.h> #include <libexif/exif-utils.h> -#if 0 -void -mnote_pentax_entry_dump (MnoteEntry *e, unsigned int indent) -{ - MnotePentaxEntry *entry = (MnotePentaxEntry *)e; - - char buf[1024]; - unsigned int i; - - for (i = 0; i < 2 * indent; i++) - buf[i] = ' '; - buf[i] = '\0'; - - if (!e) - return; - - printf ("%sTag: 0x%x ('%s')\n", buf, entry->tag, - mnote_pentax_tag_get_name (entry->tag)); - printf ("%s Format: %i ('%s')\n", buf, entry->format, - exif_format_get_name (entry->format)); - printf ("%s Components: %i\n", buf, (int) entry->components); - printf ("%s Size: %i\n", buf, entry->size); - printf ("%s Value: %s\n", buf, mnote_pentax_entry_get_value (entry)); -} - -#endif -#define CF(format,target,v) \ +#define CF(format,target,v,maxlen) \ { \ if (format != target) { \ - snprintf (v, sizeof (v), \ + snprintf (v, maxlen, \ _("Invalid format '%s', " \ "expected '%s'."), \ exif_format_get_name (format), \ @@ -69,10 +43,10 @@ } \ } -#define CC(number,target,v) \ +#define CC(number,target,v,maxlen) \ { \ if (number != target) { \ - snprintf (v, sizeof (v), \ + snprintf (v, maxlen, \ _("Invalid number of components (%i, " \ "expected %i)."), (int) number, (int) target); \ break; \ @@ -80,248 +54,246 @@ } char * -mnote_pentax_entry_get_value (MnotePentaxEntry *entry) +mnote_pentax_entry_get_value (MnotePentaxEntry *entry, char *val, unsigned int maxlen) { - static char v[1024]; ExifLong vl; ExifShort vs; if (!entry) return (NULL); - memset (v, 0, sizeof (v)); + memset (val, 0, maxlen); + maxlen--; + switch (entry->tag) { case MNOTE_PENTAX_TAG_MODE: - CF (entry->format, EXIF_FORMAT_SHORT, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); + CC (entry->components, 1, val, maxlen); vs = exif_get_short (entry->data, entry->order); switch (vs) { case 0: - strncpy (v, _("Auto"), sizeof (v)); + strncpy (val, _("Auto"), maxlen); break; case 1: - strncpy (v, _("Night-scene"), sizeof (v)); + strncpy (val, _("Night-scene"), maxlen); break; case 2: - strncpy (v, _("Manual"), sizeof (v)); + strncpy (val, _("Manual"), maxlen); break; default: - snprintf (v, sizeof (v), "%i", vs); + snprintf (val, maxlen, "%i", vs); } break; case MNOTE_PENTAX_TAG_QUALITY: - CF (entry->format, EXIF_FORMAT_SHORT, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); + CC (entry->components, 1, val, maxlen); vs = exif_get_short (entry->data, entry->order); switch (vs) { case 0: - strncpy (v, _("Good"), sizeof (v)); + strncpy (val, _("Good"), maxlen); break; case 1: - strncpy (v, _("Better"), sizeof (v)); + strncpy (val, _("Better"), maxlen); break; case 2: - strncpy (v, _("Best"), sizeof (v)); + strncpy (val, _("Best"), maxlen); break; default: - snprintf (v, sizeof (v), "%i", vs); + snprintf (val, maxlen, "%i", vs); } break; case MNOTE_PENTAX_TAG_FOCUS: - CF (entry->format, EXIF_FORMAT_SHORT, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); + CC (entry->components, 1, val, maxlen); vs = exif_get_short (entry->data, entry->order); switch (vs) { case 3: - strncpy (v, _("Auto"), sizeof (v)); + strncpy (val, _("Auto"), maxlen); break; case 2: - strncpy (v, _("Custom"), sizeof (v)); + strncpy (val, _("Custom"), maxlen); break; default: - snprintf (v, sizeof (v), "%i", vs); + snprintf (val, maxlen, "%i", vs); } break; case MNOTE_PENTAX_TAG_FLASH: - CF (entry->format, EXIF_FORMAT_SHORT, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); + CC (entry->components, 1, val, maxlen); vs = exif_get_short (entry->data, entry->order); switch (vs) { case 1: - strncpy (v, _("Auto"), sizeof (v)); + strncpy (val, _("Auto"), maxlen); break; case 2: - strncpy (v, _("Flash On"), sizeof (v)); + strncpy (val, _("Flash On"), maxlen); break; case 4: - strncpy (v, _("Flash Off"), sizeof (v)); + strncpy (val, _("Flash Off"), maxlen); break; case 6: - strncpy (v, _("Red-eye Reduction"), sizeof (v)); + strncpy (val, _("Red-eye Reduction"), maxlen); break; default: - snprintf (v, sizeof (v), "%i", vs); + snprintf (val, maxlen, "%i", vs); } break; case MNOTE_PENTAX_TAG_WHITE_BALANCE: - CF (entry->format, EXIF_FORMAT_SHORT, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); + CC (entry->components, 1, val, maxlen); vs = exif_get_short (entry->data, entry->order); switch (vs) { case 0: - strncpy (v, _("Auto"), sizeof (v)); + strncpy (val, _("Auto"), maxlen); break; case 1: - strncpy (v, _("Daylight"), sizeof (v)); + strncpy (val, _("Daylight"), maxlen); break; case 2: - strncpy (v, _("Shade"), sizeof (v)); + strncpy (val, _("Shade"), maxlen); break; case 3: - strncpy (v, _("Tungsten"), sizeof (v)); + strncpy (val, _("Tungsten"), maxlen); break; case 4: - strncpy (v, _("Fluorescent"), sizeof (v)); + strncpy (val, _("Fluorescent"), maxlen); break; case 5: - strncpy (v, _("Manual"), sizeof (v)); + strncpy (val, _("Manual"), maxlen); break; default: - snprintf (v, sizeof (v), "%i", vs); + snprintf (val, maxlen, "%i", vs); } break; case MNOTE_PENTAX_TAG_ZOOM: - CF (entry->format, EXIF_FORMAT_LONG, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_LONG, val, maxlen); + CC (entry->components, 1, val, maxlen); vl = exif_get_long (entry->data, entry->order); - switch (vl) { - default: - snprintf (v, sizeof (v), "%li", vl); - } + snprintf (val, maxlen, "%li", vl); break; case MNOTE_PENTAX_TAG_SHARPNESS: - CF (entry->format, EXIF_FORMAT_SHORT, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); + CC (entry->components, 1, val, maxlen); vs = exif_get_short (entry->data, entry->order); switch (vs) { case 0: - strncpy (v, _("Normal"), sizeof (v)); + strncpy (val, _("Normal"), maxlen); break; case 1: - strncpy (v, _("Soft"), sizeof (v)); + strncpy (val, _("Soft"), maxlen); break; case 2: - strncpy (v, _("Hard"), sizeof (v)); + strncpy (val, _("Hard"), maxlen); break; default: - snprintf (v, sizeof (v), "%i", vs); + snprintf (val, maxlen, "%i", vs); } break; case MNOTE_PENTAX_TAG_CONTRAST: - CF (entry->format, EXIF_FORMAT_SHORT, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); + CC (entry->components, 1, val, maxlen); vs = exif_get_short (entry->data, entry->order); switch (vs) { case 0: - strncpy (v, _("Normal"), sizeof (v)); + strncpy (val, _("Normal"), maxlen); break; case 1: - strncpy (v, _("Low"), sizeof (v)); + strncpy (val, _("Low"), maxlen); break; case 2: - strncpy (v, _("High"), sizeof (v)); + strncpy (val, _("High"), maxlen); break; default: - snprintf (v, sizeof (v), "%i", vs); + snprintf (val, maxlen, "%i", vs); } break; case MNOTE_PENTAX_TAG_SATURATION: - CF (entry->format, EXIF_FORMAT_SHORT, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); + CC (entry->components, 1, val, maxlen); vs = exif_get_short (entry->data, entry->order); switch (vs) { case 0: - strncpy (v, _("Normal"), sizeof (v)); + strncpy (val, _("Normal"), maxlen); break; case 1: - strncpy (v, _("Low"), sizeof (v)); + strncpy (val, _("Low"), maxlen); break; case 2: - strncpy (v, _("High"), sizeof (v)); + strncpy (val, _("High"), maxlen); break; default: - snprintf (v, sizeof (v), "%i", vs); + snprintf (val, maxlen, "%i", vs); } break; case MNOTE_PENTAX_TAG_ISO_SPEED: - CF (entry->format, EXIF_FORMAT_SHORT, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); + CC (entry->components, 1, val, maxlen); vs = exif_get_short (entry->data, entry->order); switch (vs) { case 10: - strncpy (v, _("100"), sizeof (v)); + strncpy (val, _("100"), maxlen); break; case 16: - strncpy (v, _("200"), sizeof (v)); + strncpy (val, _("200"), maxlen); break; default: - snprintf (v, sizeof (v), "%i", vs); + snprintf (val, maxlen, "%i", vs); } break; case MNOTE_PENTAX_TAG_PRINTIM: - CF (entry->format, EXIF_FORMAT_UNDEFINED, v); - CC (entry->components, 124, v); - snprintf (v, sizeof(v), "%li bytes unknown data", entry->components); + CF (entry->format, EXIF_FORMAT_UNDEFINED, val, maxlen); + CC (entry->components, 124, val, maxlen); + snprintf (val, maxlen, "%li bytes unknown data", entry->components); break; case MNOTE_PENTAX_TAG_TZ_CITY: - CF (entry->format, EXIF_FORMAT_UNDEFINED, v); - CC (entry->components, 4, v); - snprintf (v, entry->components, "%s", entry->data); + CF (entry->format, EXIF_FORMAT_UNDEFINED, val, maxlen); + CC (entry->components, 4, val, maxlen); + snprintf (val, entry->components, "%s", entry->data); break; case MNOTE_PENTAX_TAG_TZ_DST: - CF (entry->format, EXIF_FORMAT_UNDEFINED, v); - CC (entry->components, 4, v); - snprintf (v, entry->components, "%s", entry->data); + CF (entry->format, EXIF_FORMAT_UNDEFINED, val, maxlen); + CC (entry->components, 4, val, maxlen); + snprintf (val, entry->components, "%s", entry->data); break; case MNOTE_PENTAX_TAG_COLOR: - CF (entry->format, EXIF_FORMAT_SHORT, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); + CC (entry->components, 1, val, maxlen); vs = exif_get_short (entry->data, entry->order); switch (vs) { case 1: - strncpy (v, _("Full"), sizeof (v)); + strncpy (val, _("Full"), maxlen); break; case 2: - strncpy (v, _("Black & White"), sizeof (v)); + strncpy (val, _("Black & White"), maxlen); break; case 3: - strncpy (v, _("Sepia"), sizeof (v)); + strncpy (val, _("Sepia"), maxlen); break; default: - snprintf (v, sizeof (v), "%i", vs); + snprintf (val, maxlen, "%i", vs); } break; default: switch (entry->format) { case EXIF_FORMAT_ASCII: - snprintf (v, entry->components, "%s", entry->data); + snprintf (val, entry->components, "%s", entry->data); break; case EXIF_FORMAT_SHORT: vs = exif_get_short (entry->data, entry->order); - snprintf (v, sizeof (v), "%i", vs); + snprintf (val, maxlen, "%i", vs); break; case EXIF_FORMAT_LONG: vl = exif_get_long (entry->data, entry->order); - snprintf (v, sizeof (v), "%li", vl); + snprintf (val, maxlen, "%li", vl); break; case EXIF_FORMAT_UNDEFINED: default: - snprintf (v, sizeof(v), "%li bytes unknown data", + snprintf (val, maxlen, "%li bytes unknown data", entry->components); break; } break; } - return (v); + return (val); } |
From: Jan P. <pa...@us...> - 2004-01-07 14:57:42
|
Update of /cvsroot/libexif/libexif/libexif/olympus In directory sc8-pr-cvs1:/tmp/cvs-serv27322 Modified Files: exif-mnote-data-olympus.c mnote-olympus-entry.c mnote-olympus-entry.h Log Message: exif_mnote_data_olympus_get_value(), mnote_olympus_entry_get_value(): 1) 2 new args: val & maxlen 2) no static variables 3) do not duplicate string on return 4) proper NULL-termination of long strings Index: mnote-olympus-entry.h =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/olympus/mnote-olympus-entry.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- mnote-olympus-entry.h 26 Oct 2003 10:06:17 -0000 1.1 +++ mnote-olympus-entry.h 7 Jan 2004 14:57:38 -0000 1.2 @@ -38,6 +38,6 @@ ExifByteOrder order; }; -char *mnote_olympus_entry_get_value (MnoteOlympusEntry *entry); +char *mnote_olympus_entry_get_value (MnoteOlympusEntry *entry, char *val, unsigned int maxlen); #endif /* __MNOTE_OLYMPUS_ENTRY_H__ */ Index: exif-mnote-data-olympus.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/olympus/exif-mnote-data-olympus.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- exif-mnote-data-olympus.c 1 Dec 2003 18:09:29 -0000 1.5 +++ exif-mnote-data-olympus.c 7 Jan 2004 14:57:38 -0000 1.6 @@ -58,13 +58,13 @@ } static char * -exif_mnote_data_olympus_get_value (ExifMnoteData *d, unsigned int i) +exif_mnote_data_olympus_get_value (ExifMnoteData *d, unsigned int i, char *val, unsigned int maxlen) { ExifMnoteDataOlympus *n = (ExifMnoteDataOlympus *) d; if (!d) return NULL; if (n->count <= i) return NULL; - return mnote_olympus_entry_get_value (&n->entries[i]); + return mnote_olympus_entry_get_value (&n->entries[i], val, maxlen); } static void Index: mnote-olympus-entry.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/olympus/mnote-olympus-entry.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- mnote-olympus-entry.c 9 Dec 2003 19:50:00 -0000 1.5 +++ mnote-olympus-entry.c 7 Jan 2004 14:57:38 -0000 1.6 @@ -29,10 +29,10 @@ #include <libexif/exif-utils.h> #include <libexif/i18n.h> -#define CF(format,target,v) \ +#define CF(format,target,v,maxlen) \ { \ if (format != target) { \ - snprintf (v, sizeof (v), \ + snprintf (v, maxlen, \ _("Invalid format '%s', " \ "expected '%s'."), \ exif_format_get_name (format), \ @@ -41,10 +41,10 @@ } \ } -#define CC(number,target,v) \ +#define CC(number,target,v,maxlen) \ { \ if (number != target) { \ - snprintf (v, sizeof (v), \ + snprintf (v, maxlen, \ _("Invalid number of components (%i, " \ "expected %i)."), (int) number, (int) target); \ break; \ @@ -55,9 +55,9 @@ #define MIN(a, b) (((a) < (b)) ? (a) : (b)) char * -mnote_olympus_entry_get_value (MnoteOlympusEntry *entry) +mnote_olympus_entry_get_value (MnoteOlympusEntry *entry, char *val, unsigned int maxlen) { - char v[1024], buf[1024]; + char buf[32]; ExifLong vl; ExifShort vs; ExifRational vr; @@ -65,203 +65,192 @@ if (!entry) return (NULL); - memset (v, 0, sizeof (v)); + memset (val, 0, maxlen); + maxlen--; - if ((!entry->data) && (entry->components > 0)) return (strdup(v)); + if ((!entry->data) && (entry->components > 0)) return (val); switch (entry->tag) { case MNOTE_OLYMPUS_TAG_MODE: - CF (entry->format, EXIF_FORMAT_LONG, v); - CC (entry->components, 3, v); + CF (entry->format, EXIF_FORMAT_LONG, val, maxlen); + CC (entry->components, 3, val, maxlen); vl = exif_get_long (entry->data, entry->order); switch (vl) { case 0: - strncpy (v, _("normal"), sizeof (v)); + strncpy (val, _("normal"), maxlen); break; case 1: - strncpy (v, _("unknown"), sizeof (v)); + strncpy (val, _("unknown"), maxlen); break; case 2: - strncpy (v, _("fast"), sizeof (v)); + strncpy (val, _("fast"), maxlen); break; case 3: - strncpy (v, _("panorama"), sizeof (v)); + strncpy (val, _("panorama"), maxlen); break; default: - snprintf (buf, sizeof (buf), "%li", vl); - strncpy (v, buf, sizeof (v)); + snprintf (val, maxlen, _("%li"), vl); } - strncat (v, "/", sizeof (v) - 1 - strlen(v)); vl = exif_get_long (entry->data + 4, entry->order); - snprintf (buf, sizeof (buf), "%li", vl); - strncat (v, buf, sizeof (v) - 1 - strlen(v)); - strncat (v, "/", sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), "/%li/", vl); + strncat (val, buf, maxlen - strlen(val)); vl = exif_get_long (entry->data + 4, entry->order); switch (vl) { case 1: - strncat (v, _("left to right"), - sizeof (v) - 1 - strlen(v)); + strncat (val, _("left to right"), maxlen - strlen(val)); break; case 2: - strncat (v, _("right to left"), - sizeof (v) - 1 - strlen(v)); + strncat (val, _("right to left"), maxlen - strlen(val)); break; case 3: - strncat (v, _("bottom to top"), - sizeof (v) - 1 - strlen(v)); + strncat (val, _("bottom to top"), maxlen - strlen(val)); break; case 4: - strncat (v, _("top to bottom"), - sizeof (v) - 1 - strlen(v)); + strncat (val, _("top to bottom"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "%li", vl); - strncat (v, buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("%li"), vl); + strncat (val, buf, maxlen - strlen(val)); } break; case MNOTE_OLYMPUS_TAG_QUALITY: - CF (entry->format, EXIF_FORMAT_SHORT, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); + CC (entry->components, 1, val, maxlen); vs = exif_get_short (entry->data, entry->order); switch (vs) { case 1: - strncpy (v, _("SQ"), sizeof (v)); + strncpy (val, _("SQ"), maxlen); break; case 2: - strncpy (v, _("HQ"), sizeof (v)); + strncpy (val, _("HQ"), maxlen); break; case 3: - strncpy (v, _("SHQ"), sizeof (v)); + strncpy (val, _("SHQ"), maxlen); break; default: - snprintf (buf, sizeof (buf), "%i", vs); - strncpy (v, buf, sizeof (v)); + snprintf (val, maxlen, _("%i"), vs); } break; case MNOTE_OLYMPUS_TAG_MACRO: - CF (entry->format, EXIF_FORMAT_SHORT, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); + CC (entry->components, 1, val, maxlen); vs = exif_get_short (entry->data, entry->order); switch (vs) { case 0: - strncpy (v, _("no"), sizeof (v)); + strncpy (val, _("no"), maxlen); break; case 1: - strncpy (v, _("yes"), sizeof (v)); + strncpy (val, _("yes"), maxlen); break; default: - snprintf (buf, sizeof (buf), "%i", vs); - strncpy (v, buf, sizeof (v)); + snprintf (val, maxlen, _("%i"), vs); } break; case MNOTE_OLYMPUS_TAG_UNKNOWN_1: - CF (entry->format, EXIF_FORMAT_SHORT, v); - CC (entry->components, 1, v); - strncpy (v, _("Unknown tag."), sizeof (v)); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); + CC (entry->components, 1, val, maxlen); + strncpy (val, _("Unknown tag."), maxlen); break; case MNOTE_OLYMPUS_TAG_DIGIZOOM: - CF (entry->format, EXIF_FORMAT_SHORT, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); + CC (entry->components, 1, val, maxlen); vs = exif_get_short (entry->data, entry->order); switch (vs) { case 0: - strncpy (v, _("1x"), sizeof (v)); + strncpy (val, _("1x"), maxlen); break; case 2: - strncpy (v, _("2x"), sizeof (v)); + strncpy (val, _("2x"), maxlen); break; default: - snprintf (buf, sizeof (buf), "%i", vs); - strncpy (v, buf, sizeof (v)); + snprintf (val, maxlen, _("%i"), vs); } break; case MNOTE_OLYMPUS_TAG_UNKNOWN_2: - CF (entry->format, EXIF_FORMAT_RATIONAL, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_RATIONAL, val, maxlen); + CC (entry->components, 1, val, maxlen); break; case MNOTE_OLYMPUS_TAG_UNKNOWN_3: - CF (entry->format, EXIF_FORMAT_SSHORT, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_SSHORT, val, maxlen); + CC (entry->components, 1, val, maxlen); break; case MNOTE_OLYMPUS_TAG_VERSION: - CF (entry->format, EXIF_FORMAT_ASCII, v); - CC (entry->components, 5, v); - strncpy (v, entry->data, MIN (sizeof (v), entry->size)); + CF (entry->format, EXIF_FORMAT_ASCII, val, maxlen); + CC (entry->components, 5, val, maxlen); + strncpy (val, entry->data, MIN (maxlen, entry->size)); break; case MNOTE_OLYMPUS_TAG_INFO: - CF (entry->format, EXIF_FORMAT_ASCII, v); - CC (entry->components, 52, v); + CF (entry->format, EXIF_FORMAT_ASCII, val, maxlen); + CC (entry->components, 52, val, maxlen); break; case MNOTE_OLYMPUS_TAG_ID: - CF (entry->format, EXIF_FORMAT_UNDEFINED, v); - CC (entry->components, 32, v); - strncpy (v, entry->data, MIN (sizeof (v), entry->size)); + CF (entry->format, EXIF_FORMAT_UNDEFINED, val, maxlen); + CC (entry->components, 32, val, maxlen); + strncpy (val, entry->data, MIN (maxlen, entry->size)); break; case MNOTE_OLYMPUS_TAG_UNKNOWN_4: - CF (entry->format, EXIF_FORMAT_LONG, v); - CC (entry->components, 30, v); + CF (entry->format, EXIF_FORMAT_LONG, val, maxlen); + CC (entry->components, 30, val, maxlen); break; case MNOTE_OLYMPUS_TAG_FLASHMODE: - CF (entry->format, EXIF_FORMAT_SHORT, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); + CC (entry->components, 1, val, maxlen); vs = exif_get_short (entry->data, entry->order); switch (vs) { case 0: - strncpy (v, _("Auto"), sizeof (v)); + strncpy (val, _("Auto"), maxlen); break; case 1: - strncpy (v, _("Red-eye reduction"), sizeof (v)); + strncpy (val, _("Red-eye reduction"), maxlen); break; case 2: - strncpy (v, _("Fill"), sizeof (v)); + strncpy (val, _("Fill"), maxlen); break; case 3: - strncpy (v, _("Off"), sizeof (v)); + strncpy (val, _("Off"), maxlen); break; default: - snprintf (buf, sizeof (buf), "%i", vs); - strncpy (v, buf, sizeof (v)); + snprintf (val, maxlen, _("%i"), vs); } break; case MNOTE_OLYMPUS_TAG_FOCUSDIST: - CF (entry->format, EXIF_FORMAT_RATIONAL, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_RATIONAL, val, maxlen); + CC (entry->components, 1, val, maxlen); vr = exif_get_rational (entry->data, entry->order); if (vr.numerator == 0) { - strncpy (v, _("Unknown"), sizeof (v)); + strncpy (val, _("Unknown"), maxlen); } else { unsigned long tmp = vr.numerator / vr.denominator; /* printf("numerator %li, denominator %li\n", vr.numerator, vr.denominator); */ - snprintf (v, sizeof (v), "%li mm", tmp); + snprintf (val, maxlen, "%li mm", tmp); } break; case MNOTE_OLYMPUS_TAG_SHARPNESS: - CF (entry->format, EXIF_FORMAT_SHORT, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); + CC (entry->components, 1, val, maxlen); vs = exif_get_short (entry->data, entry->order); switch (vs) { case 0: - strncpy (v, _("Normal"), sizeof (v)); + strncpy (val, _("Normal"), maxlen); break; case 1: - strncpy (v, _("Hard"), sizeof (v)); + strncpy (val, _("Hard"), maxlen); break; case 2: - strncpy (v, _("Soft"), sizeof (v)); + strncpy (val, _("Soft"), maxlen); break; default: - snprintf (buf, sizeof (buf), "%i", vs); - strncpy (v, buf, sizeof (v)); + snprintf (val, maxlen, _("%i"), vs); } break; case MNOTE_OLYMPUS_TAG_WBALANCE: - CF (entry->format, EXIF_FORMAT_SHORT, v); - CC (entry->components, 2, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); + CC (entry->components, 2, val, maxlen); vs = exif_get_short (entry->data, entry->order); switch (vs) { case 1: - strncpy (v, _("Automatic"), sizeof (v)); + strncpy (val, _("Automatic"), maxlen); break; case 2: { @@ -291,60 +280,58 @@ break; } if (colorTemp) { - snprintf (v, sizeof (v), "Manual: %liK", colorTemp); + snprintf (val, maxlen, "Manual: %liK", colorTemp); } else { - strncpy (v, _("Manual: Unknown"), sizeof (v)); + strncpy (val, _("Manual: Unknown"), maxlen); } } break; case 3: - strncpy (v, _("One-touch"), sizeof (v)); + strncpy (val, _("One-touch"), maxlen); break; default: - strncpy (v, _("Unknown"), sizeof (v)); + strncpy (val, _("Unknown"), maxlen); break; } break; case MNOTE_OLYMPUS_TAG_CONTRAST: - CF (entry->format, EXIF_FORMAT_SHORT, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); + CC (entry->components, 1, val, maxlen); vs = exif_get_short (entry->data, entry->order); switch (vs) { case 0: - strncpy (v, _("Hard"), sizeof (v)); + strncpy (val, _("Hard"), maxlen); break; case 1: - strncpy (v, _("Normal"), sizeof (v)); + strncpy (val, _("Normal"), maxlen); break; case 2: - strncpy (v, _("Soft"), sizeof (v)); + strncpy (val, _("Soft"), maxlen); break; default: - snprintf (buf, sizeof (buf), "%i", vs); - strncpy (v, buf, sizeof (v)); + snprintf (val, maxlen, "%i", vs); } break; case MNOTE_OLYMPUS_TAG_MANFOCUS: - CF (entry->format, EXIF_FORMAT_SHORT, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); + CC (entry->components, 1, val, maxlen); vs = exif_get_short (entry->data, entry->order); switch (vs) { case 0: - strncpy (v, _("No"), sizeof (v)); + strncpy (val, _("No"), maxlen); break; case 1: - strncpy (v, _("Yes"), sizeof (v)); + strncpy (val, _("Yes"), maxlen); break; default: - snprintf (buf, sizeof (buf), "%i", vs); - strncpy (v, buf, sizeof (v)); + snprintf (val, maxlen, _("%i"), vs); } break; default: break; } - return (strdup (v)); + return (val); } |
From: Jan P. <pa...@us...> - 2004-01-07 14:53:09
|
Update of /cvsroot/libexif/libexif/libexif/canon In directory sc8-pr-cvs1:/tmp/cvs-serv26628 Modified Files: exif-mnote-data-canon.c mnote-canon-entry.c mnote-canon-entry.h Log Message: exif_mnote_data_canon_get_value(), mnote_canon_entry_get_value(): 1) 2 new args value & maxlen 2) no static variables 3) does not duplicate string on return Index: mnote-canon-entry.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/canon/mnote-canon-entry.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- mnote-canon-entry.c 9 Dec 2003 19:49:59 -0000 1.4 +++ mnote-canon-entry.c 7 Jan 2004 14:53:04 -0000 1.5 @@ -35,10 +35,10 @@ #undef MIN #define MIN(a, b) (((a) < (b)) ? (a) : (b)) -#define CF(format,target,v) \ +#define CF(format,target,v,maxlen) \ { \ if (format != target) { \ - snprintf (v, sizeof (v), \ + snprintf (v, maxlen, \ _("Invalid format '%s', " \ "expected '%s'."), \ exif_format_get_name (format), \ @@ -47,19 +47,19 @@ } \ } -#define CC(number,target,v) \ +#define CC(number,target,v,maxlen) \ { \ if (number != target) { \ - snprintf (v, sizeof (v), \ + snprintf (v, maxlen, \ _("Invalid number of components (%i, " \ "expected %i)."), (int) number, (int) target); \ break; \ } \ } -#define CC2(number,t1,t2,v) \ +#define CC2(number,t1,t2,v,maxlen) \ { \ if ((number != t1) && (number != t2)) { \ - snprintf (v, sizeof (v), \ + snprintf (v, maxlen, \ _("Invalid number of components (%i, " \ "expected %i or %i)."), (int) number, \ (int) t1, (int) t2); \ @@ -68,366 +68,367 @@ } char * -mnote_canon_entry_get_value (const MnoteCanonEntry *entry) +mnote_canon_entry_get_value (const MnoteCanonEntry *entry, char *val, unsigned int maxlen) { - char v[1024], buf[1024]; - ExifLong vl; - ExifShort vs, n; - int i; - unsigned char *data = entry->data; + char buf[128]; + ExifLong vl; + ExifShort vs, n; + int i; + unsigned char *data = entry->data; - if (!entry) return NULL; + if (!entry) return NULL; + + memset (val, 0, maxlen); + maxlen--; - memset (v, 0, sizeof (v)); switch (entry->tag) { case MNOTE_CANON_TAG_SETTINGS_1: - CF (entry->format, EXIF_FORMAT_SHORT, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); n = exif_get_short (data, entry->order) / 2; data += 2; - CC (entry->components, n, v); + CC (entry->components, n, val, maxlen); for (i = 1; i < n; i++) { vs = exif_get_short (data, entry->order); data += 2; switch (i) { case 1: - strncpy (v, _("Macro mode : "), sizeof (v) - 1); + strncpy (val, _("Macro mode : "), maxlen); switch (vs) { case 1: - strncat (v, _("Macro"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Macro"), maxlen - strlen(val)); break; case 2: - strncat (v, _("Normal"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Normal"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; case 2: if (vs) { snprintf (buf, sizeof (buf), _(" / Self Timer : %i (ms)"), vs*100); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + strncat (val, buf, maxlen - strlen(val)); } break; case 4: - strncat (v,_(" / Flash mode : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Flash mode : "), maxlen - strlen(val)); switch (vs) { case 0: - strncat (v, _("Flash not fired"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Flash not fired"), maxlen - strlen(val)); break; case 1: - strncat (v, _("auto"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("auto"), maxlen - strlen(val)); break; case 2: - strncat (v, _("on"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("on"), maxlen - strlen(val)); break; case 3: - strncat (v, _("red eyes reduction"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("red eyes reduction"), maxlen - strlen(val)); break; case 4: - strncat (v, _("slow synchro"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("slow synchro"), maxlen - strlen(val)); break; case 5: - strncat (v, _("auto + red eyes reduction"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("auto + red eyes reduction"), maxlen - strlen(val)); break; case 6: - strncat (v, _("on + red eyes reduction"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("on + red eyes reduction"), maxlen - strlen(val)); break; case 16: - strncat (v, _("external"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("external"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; case 5: - strncat (v, _(" / Continuous drive mode : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Continuous drive mode : "), maxlen - strlen(val)); switch (vs) { case 0: - strncat (v, _("single or timer"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("single or timer"), maxlen - strlen(val)); break; case 1: - strncat (v, _("continuous"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("continuous"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v, buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; case 7: - strncat (v, _(" / Focus mode : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Focus mode : "), maxlen - strlen(val)); switch (vs) { case 0: - strncat (v, _("One-Shot"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("One-Shot"), maxlen - strlen(val)); break; case 1: - strncat (v, _("AI Servo"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("AI Servo"), maxlen - strlen(val)); break; case 2: - strncat (v, _("AI Focus"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("AI Focus"), maxlen - strlen(val)); break; case 3: - strncat (v, _("MF"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("MF"), maxlen - strlen(val)); break; case 4: - strncat (v, _("Single"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Single"), maxlen - strlen(val)); break; case 5: - strncat (v, _("Continuous"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Continuous"), maxlen - strlen(val)); break; case 6: - strncat (v, _("MF"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("MF"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; case 10: - strncat (v, _(" / Image size : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Image size : "), maxlen - strlen(val)); switch (vs) { case 0: - strncat (v, _("Large"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Large"), maxlen - strlen(val)); break; case 1: - strncat (v, _("Medium"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Medium"), maxlen - strlen(val)); break; case 2: - strncat (v, _("Small"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Small"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; case 11: - strncat (v, _(" / Easy shooting mode : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Easy shooting mode : "), maxlen - strlen(val)); switch (vs) { case 0: - strncat (v, _("Full Auto"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Full Auto"), maxlen - strlen(val)); break; case 1: - strncat (v, _("Manual"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Manual"), maxlen - strlen(val)); break; case 2: - strncat (v, _("Landscape"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Landscape"), maxlen - strlen(val)); break; case 3: - strncat (v, _("Fast Shutter"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Fast Shutter"), maxlen - strlen(val)); break; case 4: - strncat (v, _("Slow Shutter"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Slow Shutter"), maxlen - strlen(val)); break; case 5: - strncat (v, _("Night"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Night"), maxlen - strlen(val)); break; case 6: - strncat (v, _("Black & White"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Black & White"), maxlen - strlen(val)); break; case 7: - strncat (v, _("Sepia"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Sepia"), maxlen - strlen(val)); break; case 8: - strncat (v, _("Portrait"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Portrait"), maxlen - strlen(val)); break; case 9: - strncat (v, _("Sports"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Sports"), maxlen - strlen(val)); break; case 10: - strncat (v, _("Macro / Close-Up"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Macro / Close-Up"), maxlen - strlen(val)); break; case 11: - strncat (v, _("Pan Focus"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Pan Focus"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; case 13: - strncat (v, _(" / Contrast : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Contrast : "), maxlen - strlen(val)); switch (vs) { case 0xffff: - strncat (v, _("Low"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Low"), maxlen - strlen(val)); break; case 0x0000: - strncat (v, _("Normal"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Normal"), maxlen - strlen(val)); break; case 0x0001: - strncat (v, _("High"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("High"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; case 14: - strncat (v, _(" / Saturation : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Saturation : "), maxlen - strlen(val)); switch (vs) { case 0xffff: - strncat (v, _("Low"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Low"), maxlen - strlen(val)); break; case 0x0000: - strncat (v, _("Normal"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Normal"), maxlen - strlen(val)); break; case 0x0001: - strncat (v, _("High"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("High"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; case 15: - strncat (v, _(" / Sharpness : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Sharpness : "), maxlen - strlen(val)); switch (vs) { case 0xffff: - strncat (v, _("Low"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Low"), maxlen - strlen(val)); break; case 0x0000: - strncat (v, _("Normal"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Normal"), maxlen - strlen(val)); break; case 0x0001: - strncat (v, _("High"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("High"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; case 16: if (vs) { - strncat (v, _(" / ISO : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / ISO : "), maxlen - strlen(val)); switch (vs) { case 15: - strncat (v, _("auto"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("auto"), maxlen - strlen(val)); break; case 16: - strncat (v, _("50"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("50"), maxlen - strlen(val)); break; case 17: - strncat (v, _("100"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("100"), maxlen - strlen(val)); break; case 18: - strncat (v, _("200"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("200"), maxlen - strlen(val)); break; case 19: - strncat (v, _("400"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("400"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; } case 17: - strncat (v, _(" / Metering mode : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Metering mode : "), maxlen - strlen(val)); switch (vs) { case 3: - strncat (v, _("Evaluative"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Evaluative"), maxlen - strlen(val)); break; case 4: - strncat (v, _("Partial"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Partial"), maxlen - strlen(val)); break; case 5: - strncat (v, _("Center-weighted"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Center-weighted"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; case 19: - strncat (v, _(" / AF point selected : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / AF point selected : "), maxlen - strlen(val)); switch (vs) { case 0x3000: - strncat (v, _("none (MF)"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("none (MF)"), maxlen - strlen(val)); break; case 0x3001: - strncat (v, _("auto-selected"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("auto-selected"), maxlen - strlen(val)); break; case 0x3002: - strncat (v, _("right"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("right"), maxlen - strlen(val)); break; case 0x3003: - strncat (v, _("center"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("center"), maxlen - strlen(val)); break; case 0x3004: - strncat (v, _("left"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("left"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "0x%x???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("0x%x???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; case 20: - strncat (v, _(" / Exposure mode : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Exposure mode : "), maxlen - strlen(val)); switch (vs) { - case 0: - strncat (v, _("Easy shooting"), sizeof (v) - 1 - strlen(v)); - break; - case 1: - strncat (v, _("Program"), sizeof (v) - 1 - strlen(v)); - break; + case 0: + strncat (val, _("Easy shooting"), maxlen - strlen(val)); + break; + case 1: + strncat (val, _("Program"), maxlen - strlen(val)); + break; case 2: - strncat (v, _("Tv-priority"), sizeof (v) - 1 - strlen(v)); - break; + strncat (val, _("Tv-priority"), maxlen - strlen(val)); + break; case 3: - strncat (v, _("Av-priority"), sizeof (v) - 1 - strlen(v)); - break; + strncat (val, _("Av-priority"), maxlen - strlen(val)); + break; case 4: - strncat (v, _("Manual"), sizeof (v) - 1 - strlen(v)); - break; + strncat (val, _("Manual"), maxlen - strlen(val)); + break; case 5: - strncat (v, _("A-DEP"), sizeof (v) - 1 - strlen(v)); - break; + strncat (val, _("A-DEP"), maxlen - strlen(val)); + break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); - } + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); + } break; case 23: - snprintf (buf, sizeof (buf), " / %s : %u", _("long focal length of lens (in focal units)"), vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _(" / long focal length of lens (in focal units) : %u"), vs); + strncat (val, buf, maxlen - strlen(val)); break; case 24: - snprintf (buf, sizeof (buf), " / %s : %u", _("short focal length of lens (in focal units)"), vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _(" / short focal length of lens (in focal units) : %u"), vs); + strncat (val, buf, maxlen - strlen(val)); break; case 25: - snprintf (buf, sizeof (buf), " / %s : %u", _("focal units per mm"), vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _(" / focal units per mm : %u"), vs); + strncat (val, buf, maxlen - strlen(val)); break; case 29: - strncat (v, _(" / Flash details : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Flash details : "), maxlen - strlen(val)); if ((vs>>14)&1) - strncat (v, _("External E-TTL"), sizeof (v) - 1 - strlen(v)); - if ((vs>>13)&1) - strncat (v, _("Internal flash"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("External E-TTL"), maxlen - strlen(val)); + if ((vs>>13)&1) + strncat (val, _("Internal flash"), maxlen - strlen(val)); if ((vs>>11)&1) - strncat (v, _("FP sync used"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("FP sync used"), maxlen - strlen(val)); if ((vs>>4)&1) - strncat (v, _("FP sync enabled"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("FP sync enabled"), maxlen - strlen(val)); #ifdef DEBUG - printf ("Value29=0x%08x\n", vs); + printf ("Value29=0x%08x\n", vs); #endif break; case 32: - snprintf (buf, sizeof (buf), " / %s : ", _("Focus mode2")); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Focus mode2 : "), maxlen - strlen(val)); switch (vs) { - case 0: - strncat (v, _("Single"), sizeof (v) - 1 - strlen(v)); - break; - case 1: - strncat (v, _("Continuous"), sizeof (v) - 1 - strlen(v)); - break; + case 0: + strncat (val, _("Single"), maxlen - strlen(val)); + break; + case 1: + strncat (val, _("Continuous"), maxlen - strlen(val)); + break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); - } + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); + } break; #ifdef DEBUG default: @@ -439,10 +440,10 @@ break; case MNOTE_CANON_TAG_SETTINGS_2: - CF (entry->format, EXIF_FORMAT_SHORT, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); n = exif_get_short (data, entry->order)/2; data += 2; - CC (entry->components, n, v); + CC (entry->components, n, val, maxlen); #ifdef DEBUG printf ("Setting2 size %d %d\n",n,entry->size); #endif @@ -452,68 +453,67 @@ data+=2; switch(i) { case 7: - strncpy (v, _("White balance : "), sizeof (v) - 1 - strlen(v)); + strncpy (val, _("White balance : "), maxlen - strlen(val)); switch (vs) { - case 0: - strncat (v, _("Auto"), sizeof (v) - 1 - strlen(v)); - break; - case 1: - strncat (v, _("Sunny"), sizeof (v) - 1 - strlen(v)); - break; + case 0: + strncat (val, _("Auto"), maxlen - strlen(val)); + break; + case 1: + strncat (val, _("Sunny"), maxlen - strlen(val)); + break; case 2: - strncat (v, _("Cloudy"), sizeof (v) - 1 - strlen(v)); - break; + strncat (val, _("Cloudy"), maxlen - strlen(val)); + break; case 3: - strncat (v, _("Tungsten"), sizeof (v) - 1 - strlen(v)); - break; + strncat (val, _("Tungsten"), maxlen - strlen(val)); + break; case 4: - strncat (v, _("Flourescent"), sizeof (v) - 1 - strlen(v)); - break; + strncat (val, _("Flourescent"), maxlen - strlen(val)); + break; case 5: - strncat (v, _("Flash"), sizeof (v) - 1 - strlen(v)); - break; + strncat (val, _("Flash"), maxlen - strlen(val)); + break; case 6: - strncat (v, _("Custom"), sizeof (v) - 1 - strlen(v)); - break; + strncat (val, _("Custom"), maxlen - strlen(val)); + break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); - } + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); + } break; case 9: - snprintf (buf, sizeof (buf), " / %s : %u", _("Sequence number"), vs); - strncat (v, buf, sizeof (v) - 1 - strlen(v)); - + snprintf (buf, sizeof (buf), _(" / Sequence number : %u"), vs); + strncat (val, buf, maxlen - strlen(val)); break; case 14: if (vs>>12) { - strncat (v, _(" / AF point used : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / AF point used : "), maxlen - strlen(val)); if (vs&1) - strncat (v, _("Right"), sizeof (v) - 1 - strlen(v)); - if ((vs>>1)&1) - strncat (v, _("Center"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Right"), maxlen - strlen(val)); + if ((vs>>1)&1) + strncat (val, _("Center"), maxlen - strlen(val)); if ((vs>>2)&1) - strncat (v, _("Left"), sizeof (v) - 1 - strlen(v)); - snprintf (buf, sizeof (buf), " (%u %s)", vs>>12, _("available focus point")); - strncat (v, buf, sizeof (v) - 1 - strlen(v)); + strncat (val, _("Left"), maxlen - strlen(val)); + snprintf (buf, sizeof (buf), _(" (%u available focus point)"), vs>>12); + strncat (val, buf, maxlen - strlen(val)); } #ifdef DEBUG - printf ("0x%08x\n", vs); + printf ("0x%08x\n", vs); #endif break; case 15: - snprintf (buf, sizeof (buf), " / %s : %.2f EV", _("Flash bias"), vs/32.0); - strncat (v, buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _(" / Flash bias : %.2f EV"), vs/32.0); + strncat (val, buf, maxlen - strlen(val)); break; case 19: - snprintf (buf, sizeof (buf), " / %s : %u", _("Subject Distance (mm)"), vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _(" / Subject Distance (mm) : %u"), vs); + strncat (val, buf, maxlen - strlen(val)); break; #ifdef DEBUG - default: - printf ("Value%d=%d\n", i, vs); + default: + printf ("Value%d=%d\n", i, vs); #endif } } @@ -522,36 +522,36 @@ case MNOTE_CANON_TAG_IMAGE_TYPE: case MNOTE_CANON_TAG_OWNER: - CF (entry->format, EXIF_FORMAT_ASCII, v); - CC (entry->components, 32, v); - strncpy (v,data,MIN (entry->size, sizeof (v) - 1)); + CF (entry->format, EXIF_FORMAT_ASCII, val, maxlen); + CC (entry->components, 32, val, maxlen); + strncpy (val, data, MIN (entry->size, maxlen)); break; case MNOTE_CANON_TAG_FIRMWARE: - CF (entry->format, EXIF_FORMAT_ASCII, v); - CC2 (entry->components, 24, 32, v); - strncpy (v,data,MIN (entry->size, sizeof (v) - 1)); + CF (entry->format, EXIF_FORMAT_ASCII, val, maxlen); + CC2 (entry->components, 24, 32, val, maxlen); + strncpy (val, data, MIN (entry->size, maxlen)); break; case MNOTE_CANON_TAG_IMAGE_NUMBER: - CF (entry->format, EXIF_FORMAT_LONG, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_LONG, val, maxlen); + CC (entry->components, 1, val, maxlen); vl = exif_get_long (data, entry->order); - snprintf (v, sizeof (v), "%03lu-%04lu", vl/10000,vl%10000); + snprintf (val, maxlen, "%03lu-%04lu", vl/10000,vl%10000); break; case MNOTE_CANON_TAG_SERIAL_NUMBER: - CF (entry->format, EXIF_FORMAT_LONG, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_LONG, val, maxlen); + CC (entry->components, 1, val, maxlen); vl = exif_get_long (data, entry->order); - snprintf (v, sizeof (v), "%04X-%05d", (int)vl>>16,(int)vl&0xffff); + snprintf (val, maxlen, "%04X-%05d", (int)vl>>16,(int)vl&0xffff); break; case MNOTE_CANON_TAG_CUSTOM_FUNCS: - CF (entry->format, EXIF_FORMAT_SHORT, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); n = exif_get_short (data, entry->order)/2; data+=2; - CC (entry->components, n, v); + CC (entry->components, n, val, maxlen); #ifdef DEBUG printf ("Custom Function size %d %d\n",n,entry->size); #endif @@ -559,8 +559,8 @@ { vs = exif_get_short (data, entry->order); data += 2; - snprintf (buf, sizeof(buf), "C.F%d : %u", i, vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof(buf), _("C.F%d : %u"), i, vs); + strncat (val, buf, maxlen - strlen(val)); } break; @@ -579,10 +579,10 @@ printf ("Value%d=%d\n", i, vs); } else if (entry->format == EXIF_FORMAT_ASCII) - strncpy (v,data,MIN (entry->size, sizeof (v) - 1)); + strncpy (val, data, MIN (entry->size, maxlen)); #endif break; } - return strdup (v); + return val; } Index: mnote-canon-entry.h =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/canon/mnote-canon-entry.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- mnote-canon-entry.h 26 Oct 2003 10:06:17 -0000 1.1 +++ mnote-canon-entry.h 7 Jan 2004 14:53:04 -0000 1.2 @@ -38,6 +38,6 @@ ExifByteOrder order; }; -char *mnote_canon_entry_get_value (const MnoteCanonEntry *entry); +char *mnote_canon_entry_get_value (const MnoteCanonEntry *entry, char *val, unsigned int maxlen); #endif /* __MNOTE_CANON_ENTRY_H__ */ Index: exif-mnote-data-canon.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/canon/exif-mnote-data-canon.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- exif-mnote-data-canon.c 27 Oct 2003 22:34:30 -0000 1.4 +++ exif-mnote-data-canon.c 7 Jan 2004 14:53:04 -0000 1.5 @@ -60,13 +60,13 @@ } static char * -exif_mnote_data_canon_get_value (ExifMnoteData *note, unsigned int n) +exif_mnote_data_canon_get_value (ExifMnoteData *note, unsigned int n, char *val, unsigned int maxlen) { - ExifMnoteDataCanon *cnote = (ExifMnoteDataCanon *) note; + ExifMnoteDataCanon *cnote = (ExifMnoteDataCanon *) note; if (!note) return NULL; if (cnote->count <= n) return NULL; - return mnote_canon_entry_get_value (&cnote->entries[n]); + return mnote_canon_entry_get_value (&cnote->entries[n], val, maxlen); } static void @@ -164,13 +164,13 @@ memset (*buf, 0, sizeof (char) * *buf_size); /* Save the number of entries */ - exif_set_short (*buf, n->order, n->count); + exif_set_short (*buf, n->order, (ExifShort) n->count); /* Save each entry */ for (i = 0; i < n->count; i++) { o = 2 + i * 12; - exif_set_short (*buf + o + 0, n->order, n->entries[i].tag); - exif_set_short (*buf + o + 2, n->order, n->entries[i].format); + exif_set_short (*buf + o + 0, n->order, (ExifShort) n->entries[i].tag); + exif_set_short (*buf + o + 2, n->order, (ExifShort) n->entries[i].format); exif_set_long (*buf + o + 4, n->order, n->entries[i].components); o += 8; |
From: Lutz M?l. <lu...@us...> - 2003-12-09 19:50:04
|
Update of /cvsroot/libexif/libexif/libexif/canon In directory sc8-pr-cvs1:/tmp/cvs-serv4838/libexif/canon Modified Files: mnote-canon-entry.c Log Message: 2003-12-09 Lutz Mueller <lu...@us...> A couple of fixes by Jan Patera <pa...@pi...>: * libexif Index: mnote-canon-entry.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/canon/mnote-canon-entry.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- mnote-canon-entry.c 27 Oct 2003 22:34:30 -0000 1.3 +++ mnote-canon-entry.c 9 Dec 2003 19:49:59 -0000 1.4 @@ -32,6 +32,9 @@ /* #define DEBUG */ +#undef MIN +#define MIN(a, b) (((a) < (b)) ? (a) : (b)) + #define CF(format,target,v) \ { \ if (format != target) { \ @@ -53,6 +56,16 @@ break; \ } \ } +#define CC2(number,t1,t2,v) \ +{ \ + if ((number != t1) && (number != t2)) { \ + snprintf (v, sizeof (v), \ + _("Invalid number of components (%i, " \ + "expected %i or %i)."), (int) number, \ + (int) t1, (int) t2); \ + break; \ + } \ +} char * mnote_canon_entry_get_value (const MnoteCanonEntry *entry) @@ -511,13 +524,13 @@ case MNOTE_CANON_TAG_OWNER: CF (entry->format, EXIF_FORMAT_ASCII, v); CC (entry->components, 32, v); - strncpy (v,data,sizeof (v)); + strncpy (v,data,MIN (entry->size, sizeof (v) - 1)); break; case MNOTE_CANON_TAG_FIRMWARE: CF (entry->format, EXIF_FORMAT_ASCII, v); - CC (entry->components, 24, v); - strncpy (v,data,sizeof (v)); + CC2 (entry->components, 24, 32, v); + strncpy (v,data,MIN (entry->size, sizeof (v) - 1)); break; case MNOTE_CANON_TAG_IMAGE_NUMBER: @@ -566,7 +579,7 @@ printf ("Value%d=%d\n", i, vs); } else if (entry->format == EXIF_FORMAT_ASCII) - strncpy (v, data, sizeof (v)); + strncpy (v,data,MIN (entry->size, sizeof (v) - 1)); #endif break; } |
From: Lutz M?l. <lu...@us...> - 2003-12-09 19:50:04
|
Update of /cvsroot/libexif/libexif/libexif/olympus In directory sc8-pr-cvs1:/tmp/cvs-serv4838/libexif/olympus Modified Files: mnote-olympus-entry.c Log Message: 2003-12-09 Lutz Mueller <lu...@us...> A couple of fixes by Jan Patera <pa...@pi...>: * libexif Index: mnote-olympus-entry.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/olympus/mnote-olympus-entry.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- mnote-olympus-entry.c 1 Dec 2003 18:27:50 -0000 1.4 +++ mnote-olympus-entry.c 9 Dec 2003 19:50:00 -0000 1.5 @@ -66,6 +66,9 @@ return (NULL); memset (v, 0, sizeof (v)); + + if ((!entry->data) && (entry->components > 0)) return (strdup(v)); + switch (entry->tag) { case MNOTE_OLYMPUS_TAG_MODE: CF (entry->format, EXIF_FORMAT_LONG, v); |
From: Lutz M?l. <lu...@us...> - 2003-12-09 19:50:04
|
Update of /cvsroot/libexif/libexif/libexif In directory sc8-pr-cvs1:/tmp/cvs-serv4838/libexif Modified Files: exif-entry.c Log Message: 2003-12-09 Lutz Mueller <lu...@us...> A couple of fixes by Jan Patera <pa...@pi...>: * libexif Index: exif-entry.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-entry.c,v retrieving revision 1.41 retrieving revision 1.42 diff -u -d -r1.41 -r1.42 --- exif-entry.c 7 Dec 2003 23:26:05 -0000 1.41 +++ exif-entry.c 9 Dec 2003 19:49:59 -0000 1.42 @@ -153,6 +153,18 @@ ExifByteOrder o; double d; ExifEntry *entry; + static struct { + char *label; + char major, minor; + } versions[] = { + {"0110", 1, 1}, + {"0120", 1, 2}, + {"0200", 2, 0}, + {"0210", 2, 1}, + {"0220", 2, 2}, + {"0221", 2, 21}, + {NULL , 0, 0} + }; bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); bindtextdomain (GETTEXT_PACKAGE, LIBEXIF_LOCALEDIR); @@ -177,26 +189,29 @@ case EXIF_TAG_USER_COMMENT: CF (e->format, EXIF_FORMAT_UNDEFINED, v); if (e->size < 8) break; - strncpy (v, e->data + 8, MIN (e->size, sizeof (v) - 1)); + strncpy (v, e->data + 8, MIN (e->size - 8, sizeof (v) - 1)); break; case EXIF_TAG_EXIF_VERSION: CF (e->format, EXIF_FORMAT_UNDEFINED, v); CC (e->components, 4, v); - if (!memcmp (e->data, "0110", 4)) - strncpy (v, "Exif Version 1.1", sizeof (v) - 1); - else if (!memcmp (e->data, "0200", 4)) - strncpy (v, "Exif Version 2.0", sizeof (v) - 1); - else if (!memcmp (e->data, "0210", 4)) - strncpy (v, "Exif Version 2.1", sizeof (v) - 1); - else if (!memcmp (e->data, "0220", 4)) - strncpy (v, "Exif Version 2.2", sizeof (v) - 1); - else strncpy (v, _("Unknown Exif Version"), sizeof (v) - 1); + strncpy (v, _("Unknown Exif Version"), sizeof (v) - 1); + for (i = 0; versions[i].label; i++) { + if (!memcmp (e->data, versions[i].label, 4)) { + snprintf (v, sizeof (v) - 1, + _("Exif Version %d.%d"), + versions[i].major, + versions[i].minor); + break; + } + } break; case EXIF_TAG_FLASH_PIX_VERSION: CF (e->format, EXIF_FORMAT_UNDEFINED, v); CC (e->components, 4, v); if (!memcmp (e->data, "0100", 4)) - strncpy (v, "FlashPix Version 1.0", sizeof (v)); + strncpy (v, _("FlashPix Version 1.0"), sizeof (v)); + else if (!memcmp (e->data, "0101", 4)) + strncpy (v, _("FlashPix Version 1.01"), sizeof (v)); else strncpy (v, _("Unknown FlashPix Version"), sizeof (v)); break; @@ -978,6 +993,11 @@ strncat (v, ", ", sizeof (v)); strncat (v, b, sizeof (v)); } + break; + case EXIF_FORMAT_DOUBLE: + case EXIF_FORMAT_FLOAT: + default: + /* What to do here? */ break; } } |