  
    
main.htmlMain Page     
classes.htmlData Structures     
files.htmlFiles     
dirs.htmlDirectories   
  
    
files.htmlFile List     
globals.htmlGlobals   
dir_20715630405f3b63e7ab7a5c713843d9.htmllibexif exif-loader.c
exif-loader_8c.htmlGo to the documentation of this file. 00001 /* exif-loader.c 00002  * 00003  * Copyright © 2002 Lutz Müller <lutz@users.sourceforge.net> 00004  * 00005  * This library is free software; you can redistribute it and/or 00006  * modify it under the terms of the GNU Lesser General Public 00007  * License as published by the Free Software Foundation; either 00008  * version 2 of the License, or (at your option) any later version. 00009  * 00010  * This library is distributed in the hope that it will be useful, 00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 00013  * Lesser General Public License for more details. 00014  * 00015  * You should have received a copy of the GNU Lesser General Public 00016  * License along with this library; if not, write to the 00017  * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00018  * Boston, MA 02111-1307, USA. 00019  */ 00020 
00021 #include <config.h> 00022 
00023 #include < exif-loader_8h.htmllibexif/exif-loader.h > 00024 #include < i18n_8h.htmllibexif/i18n.h > 00025 
00026 #include <stdlib.h> 00027 #include <string.h> 00028 #include <stdio.h> 00029 
00030 #undef JPEG_MARKER_SOI exif-loader_8c.html#08365525ee0dff7ff58f8231305c3e8900031  #define JPEG_MARKER_SOI  0xd8 00032 #undef JPEG_MARKER_APP0 exif-loader_8c.html#7385540b8a640c8d67cf453b14aeddb300033  #define JPEG_MARKER_APP0 0xe0 00034 #undef JPEG_MARKER_APP1 exif-loader_8c.html#203cbb3604314163bb57300f8a2aa88600035  #define JPEG_MARKER_APP1 0xe1 00036 #undef JPEG_MARKER_APP13 exif-loader_8c.html#10ab07534f9e7f4eec09e70883bbe0aa00037  #define JPEG_MARKER_APP13 0xed 00038 #undef JPEG_MARKER_COM exif-loader_8c.html#719b108208ebd0be85200daba6c2ac2a00039  #define JPEG_MARKER_COM 0xfe 00040 exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcaf00041  typedef enum {
00042         exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcafb6dfdc745c1d1dfaac2329a3356da91aEL_READ  = 0,
00043         exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcafeaf6aac6035d833cdc1bcc26e0a7cbe6EL_READ_SIZE_BYTE_24 ,
00044         exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcaf34283faa3192715dd938ec90b323e410EL_READ_SIZE_BYTE_16 ,
00045         exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcafda4deba1789e12fca5362ec998d3a640EL_READ_SIZE_BYTE_08 ,
00046         exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcaf584adefdbfb199ff2203cbae469a42a6EL_READ_SIZE_BYTE_00 ,
00047         exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcaf8beb68fb14445a05a6909a2e341cd68bEL_SKIP_BYTES ,
00048         exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcaf0ae4adb5f353212460dd6ae1bb13275dEL_EXIF_FOUND ,
00049 } exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcafExifLoaderState ;
00050 
exif-loader_8c.html#80b45ce64cc31ede356f1f174353998e00051  typedef enum {
00052         exif-loader_8c.html#80b45ce64cc31ede356f1f174353998e74adf2397e53e892793d03496bdcff45EL_DATA_FORMAT_UNKNOWN ,
00053         exif-loader_8c.html#80b45ce64cc31ede356f1f174353998ec42e976a8d8105dae8e87f33c85df8c1EL_DATA_FORMAT_EXIF ,
00054         exif-loader_8c.html#80b45ce64cc31ede356f1f174353998e5ca26bff4b4b0128341a711386d050a0EL_DATA_FORMAT_JPEG ,
00055         exif-loader_8c.html#80b45ce64cc31ede356f1f174353998ec5b71d4c2d47135adc051e4d89e5e6ecEL_DATA_FORMAT_FUJI_RAW 00056 } exif-loader_8c.html#80b45ce64cc31ede356f1f174353998eExifLoaderDataFormat ;
00057 
struct__ExifLoader.html00058  struct struct__ExifLoader.html_ExifLoader  {
struct__ExifLoader.html#df32d13dbadcf6fdda9a146ff1408ce600059          exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcafExifLoaderState  struct__ExifLoader.html#df32d13dbadcf6fdda9a146ff1408ce6state ;
struct__ExifLoader.html#a425536e01e8a6de9902cbd50b24189e00060          exif-loader_8c.html#80b45ce64cc31ede356f1f174353998eExifLoaderDataFormat  struct__ExifLoader.html#a425536e01e8a6de9902cbd50b24189edata_format ;
00061 
00062         /* Small buffer used for detection of format */ struct__ExifLoader.html#d4a31084fa944d3895c440f14254f42800063          unsigned char struct__ExifLoader.html#d4a31084fa944d3895c440f14254f428b [12];
struct__ExifLoader.html#3275265a7768bf887c3e6132bc84010200064          unsigned char struct__ExifLoader.html#3275265a7768bf887c3e6132bc840102b_len ;
00065 
struct__ExifLoader.html#61d320036abb598446c4d2ed6c01cc8900066          unsigned int struct__ExifLoader.html#61d320036abb598446c4d2ed6c01cc89size ;
struct__ExifLoader.html#f6156223d04383748a9fca2de12e48c500067          unsigned char * struct__ExifLoader.html#f6156223d04383748a9fca2de12e48c5buf ;
struct__ExifLoader.html#494e639f6d9649a1b7998c5ee26d205600068          unsigned int struct__ExifLoader.html#494e639f6d9649a1b7998c5ee26d2056bytes_read ;
00069 
struct__ExifLoader.html#5bd5e067833806862766076feb41bd0800070          unsigned int struct__ExifLoader.html#5bd5e067833806862766076feb41bd08ref_count ;
00071 
struct__ExifLoader.html#f463007ba33832569bbe645fa37c2ced00072          struct__ExifLog.htmlExifLog  * struct__ExifLoader.html#f463007ba33832569bbe645fa37c2cedlog ;
struct__ExifLoader.html#1d985a175f46195e2b6a0bdb9945077800073          struct__ExifMem.htmlExifMem  * struct__ExifLoader.html#1d985a175f46195e2b6a0bdb99450778mem ;
00074 };
00075 
exif-loader_8c.html#2a54a3fd3af187fb5613823530f5015d00076  static const unsigned char exif-data_8c.html#2a54a3fd3af187fb5613823530f5015dExifHeader [] = {0x45, 0x78, 0x69, 0x66, 0x00, 0x00};
00077 
00078 static void *
exif-loader_8c.html#87cae5ed2b044ee0f38eadab9ed6398300079  exif-loader_8c.html#87cae5ed2b044ee0f38eadab9ed63983exif_loader_alloc  ( struct__ExifLoader.htmlExifLoader  *l, unsigned int i)
00080 {
00081         void *d;
00082 
00083         if (!l || !i) 
00084                 return NULL;
00085 
00086         d = exif-mem_8c.html#28065115ce31c8c9c7701df5b3f4ada5exif_mem_alloc  (l-> struct__ExifLoader.html#1d985a175f46195e2b6a0bdb99450778mem , i);
00087         if (d) 
00088                 return d;
00089 
00090         exif-log_8h.html#8e63681e2472538492dbd994318d55c1EXIF_LOG_NO_MEMORY  (l-> struct__ExifLoader.html#f463007ba33832569bbe645fa37c2cedlog , "ExifLog", i);
00091         return NULL;
00092 }
00093 
00094 #undef  MIN exif-loader_8c.html#9b073a1e97ac8f23636b9d2d443525a500095  #define MIN(a, b)  (((a) < (b)) ? (a) : (b)) 00096 00097 void exif-loader_8h.html#0c93af20a9cabf0cfc89c12517bb75ec00098  exif-loader_8c.html#8e5095d608ceb8ef7e92b9f56f6f52faexif_loader_write_file  ( struct__ExifLoader.htmlExifLoader  *l, const char *path)
00099 {
00100         FILE *f;
00101         int exif-format_8c.html#c1953082f2467dad4bbec15ebbc57a21size ;
00102         unsigned char data[1024];
00103 
00104         if (!l) 
00105                 return;
00106 
00107         f = fopen (path, "rb");
00108         if (!f) {
00109                 exif-log_8c.html#2252b03f7df6cd3688d6647cd7ba3fccexif_log  (l-> struct__ExifLoader.html#f463007ba33832569bbe645fa37c2cedlog , exif-log_8h.html#d7dbc9f25878759b54247de66204b7f27b03249290a865a46b4e8c7d82090719EXIF_LOG_CODE_NONE , "ExifLoader",
00110                           i18n_8h.html#709240620a80c25aca1c4e2576c3cba8_ ("The file '%s' could not be opened."), path);
00111                 return;
00112         }
00113         while (1) {
00114                 size = fread (data, 1, sizeof (data), f);
00115                 if (size <= 0) 
00116                         break;
00117                 if (! exif-loader_8c.html#f3f1cad8e97e98dfbe5bdab0a66c8f6eexif_loader_write  (l, data, size)) 
00118                         break;
00119         }
00120         fclose (f);
00121 }
00122 
00123 static unsigned int exif-loader_8c.html#3ce49c0fdecf1d582239abc67c8a098700124  exif-loader_8c.html#3ce49c0fdecf1d582239abc67c8a0987exif_loader_copy  ( struct__ExifLoader.htmlExifLoader  *eld, unsigned char *buf, unsigned int len)
00125 {
00126         if (!eld || (len && !buf) || (eld-> struct__ExifLoader.html#494e639f6d9649a1b7998c5ee26d2056bytes_read  >= eld-> struct__ExifLoader.html#61d320036abb598446c4d2ed6c01cc89size )) 
00127                 return 0;
00128 
00129         /* If needed, allocate the buffer. */ 00130         if (!eld-> struct__ExifLoader.html#f6156223d04383748a9fca2de12e48c5buf ) 
00131                 eld-> struct__ExifLoader.html#f6156223d04383748a9fca2de12e48c5buf  = exif-loader_8c.html#87cae5ed2b044ee0f38eadab9ed63983exif_loader_alloc  (eld, eld-> struct__ExifLoader.html#61d320036abb598446c4d2ed6c01cc89size );
00132         if (!eld-> struct__ExifLoader.html#f6156223d04383748a9fca2de12e48c5buf ) 
00133                 return 0;
00134 
00135         /* Copy memory */ 00136         len = exif-loader_8c.html#9b073a1e97ac8f23636b9d2d443525a5MIN  (len, eld-> struct__ExifLoader.html#61d320036abb598446c4d2ed6c01cc89size  - eld-> struct__ExifLoader.html#494e639f6d9649a1b7998c5ee26d2056bytes_read );
00137         memcpy (eld-> struct__ExifLoader.html#f6156223d04383748a9fca2de12e48c5buf  + eld-> struct__ExifLoader.html#494e639f6d9649a1b7998c5ee26d2056bytes_read , buf, len);
00138         eld-> struct__ExifLoader.html#494e639f6d9649a1b7998c5ee26d2056bytes_read  += len;
00139 
00140         return (eld-> struct__ExifLoader.html#494e639f6d9649a1b7998c5ee26d2056bytes_read  >= eld-> struct__ExifLoader.html#61d320036abb598446c4d2ed6c01cc89size ) ? 0 : 1;
00141 }
00142 
00143 unsigned char exif-loader_8h.html#668dff0e8c177802727108d1e97b5cb500144  exif-loader_8c.html#f3f1cad8e97e98dfbe5bdab0a66c8f6eexif_loader_write  ( struct__ExifLoader.htmlExifLoader  *eld, unsigned char *buf, unsigned int len)
00145 {
00146         unsigned int i;
00147 
00148         if (!eld || (len && !buf)) 
00149                 return 0;
00150 
00151         switch (eld-> struct__ExifLoader.html#df32d13dbadcf6fdda9a146ff1408ce6state ) {
00152         case exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcaf0ae4adb5f353212460dd6ae1bb13275dEL_EXIF_FOUND :
00153                 return exif-loader_8c.html#3ce49c0fdecf1d582239abc67c8a0987exif_loader_copy  (eld, buf, len);
00154         case exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcaf8beb68fb14445a05a6909a2e341cd68bEL_SKIP_BYTES :
00155                 if (eld-> struct__ExifLoader.html#61d320036abb598446c4d2ed6c01cc89size  > len) { 
00156                         eld-> struct__ExifLoader.html#61d320036abb598446c4d2ed6c01cc89size  -= len; 
00157                         return 1; 
00158                 }
00159                 len -= eld-> struct__ExifLoader.html#61d320036abb598446c4d2ed6c01cc89size ;
00160                 buf += eld-> struct__ExifLoader.html#61d320036abb598446c4d2ed6c01cc89size ;
00161                 eld-> struct__ExifLoader.html#61d320036abb598446c4d2ed6c01cc89size  = 0;
00162                 eld-> struct__ExifLoader.html#3275265a7768bf887c3e6132bc840102b_len  = 0;
00163                 switch (eld-> struct__ExifLoader.html#a425536e01e8a6de9902cbd50b24189edata_format ) {
00164                 case exif-loader_8c.html#80b45ce64cc31ede356f1f174353998ec5b71d4c2d47135adc051e4d89e5e6ecEL_DATA_FORMAT_FUJI_RAW :
00165                         eld-> struct__ExifLoader.html#df32d13dbadcf6fdda9a146ff1408ce6state  = exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcafeaf6aac6035d833cdc1bcc26e0a7cbe6EL_READ_SIZE_BYTE_24 ;
00166                         break;
00167                 default:
00168                         eld-> struct__ExifLoader.html#df32d13dbadcf6fdda9a146ff1408ce6state  = exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcafb6dfdc745c1d1dfaac2329a3356da91aEL_READ ;
00169                         break;
00170                 }
00171                 break;
00172         default:
00173                 break;
00174         }
00175 
00176         exif-log_8c.html#2252b03f7df6cd3688d6647cd7ba3fccexif_log  (eld-> struct__ExifLoader.html#f463007ba33832569bbe645fa37c2cedlog , exif-log_8h.html#d7dbc9f25878759b54247de66204b7f2e8386f9a77a68764087d7f3d692f383eEXIF_LOG_CODE_DEBUG , "ExifLoader",
00177                   "Scanning %i byte(s) of data...", len);
00178 
00179         /* 00180          * First fill the small buffer. Only continue if the buffer 00181          * is filled. Note that EXIF data contains at least 12 bytes. 00182          */ 00183         i = exif-loader_8c.html#9b073a1e97ac8f23636b9d2d443525a5MIN  (len, sizeof (eld-> struct__ExifLoader.html#d4a31084fa944d3895c440f14254f428b ) - eld-> struct__ExifLoader.html#3275265a7768bf887c3e6132bc840102b_len );
00184         if (i) {
00185                 memcpy (&eld-> struct__ExifLoader.html#d4a31084fa944d3895c440f14254f428b [eld-> struct__ExifLoader.html#3275265a7768bf887c3e6132bc840102b_len ], buf, i);
00186                 eld-> struct__ExifLoader.html#3275265a7768bf887c3e6132bc840102b_len  += i;
00187                 if (eld-> struct__ExifLoader.html#3275265a7768bf887c3e6132bc840102b_len  < sizeof (eld-> struct__ExifLoader.html#d4a31084fa944d3895c440f14254f428b )) 
00188                         return 1;
00189                 buf += i;
00190                 len -= i;
00191         }
00192 
00193         switch (eld-> struct__ExifLoader.html#a425536e01e8a6de9902cbd50b24189edata_format ) {
00194         case exif-loader_8c.html#80b45ce64cc31ede356f1f174353998e74adf2397e53e892793d03496bdcff45EL_DATA_FORMAT_UNKNOWN :
00195 
00196                 /* Check the small buffer against known formats. */ 00197                 if (!memcmp (eld-> struct__ExifLoader.html#d4a31084fa944d3895c440f14254f428b , "FUJIFILM", 8)) {
00198 
00199                         /* Skip to byte 84. There is another offset there. */ 00200                         eld-> struct__ExifLoader.html#a425536e01e8a6de9902cbd50b24189edata_format  = exif-loader_8c.html#80b45ce64cc31ede356f1f174353998ec5b71d4c2d47135adc051e4d89e5e6ecEL_DATA_FORMAT_FUJI_RAW ;
00201                         eld-> struct__ExifLoader.html#61d320036abb598446c4d2ed6c01cc89size  = 84;
00202                         eld-> struct__ExifLoader.html#df32d13dbadcf6fdda9a146ff1408ce6state  = exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcaf8beb68fb14445a05a6909a2e341cd68bEL_SKIP_BYTES ;
00203                         eld-> struct__ExifLoader.html#61d320036abb598446c4d2ed6c01cc89size  = 84;
00204 
00205                 } else if (!memcmp (eld-> struct__ExifLoader.html#d4a31084fa944d3895c440f14254f428b  + 2, exif-data_8c.html#2a54a3fd3af187fb5613823530f5015dExifHeader , sizeof ( exif-data_8c.html#2a54a3fd3af187fb5613823530f5015dExifHeader ))) {
00206 
00207                         /* Read the size (2 bytes). */ 00208                         eld-> struct__ExifLoader.html#a425536e01e8a6de9902cbd50b24189edata_format  = exif-loader_8c.html#80b45ce64cc31ede356f1f174353998ec42e976a8d8105dae8e87f33c85df8c1EL_DATA_FORMAT_EXIF ;
00209                         eld-> struct__ExifLoader.html#df32d13dbadcf6fdda9a146ff1408ce6state  = exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcafda4deba1789e12fca5362ec998d3a640EL_READ_SIZE_BYTE_08 ;
00210                 }
00211         default:
00212                 break;
00213         }
00214 
00215         for (i = 0; i < sizeof (eld-> struct__ExifLoader.html#d4a31084fa944d3895c440f14254f428b ); i++)
00216                 switch (eld-> struct__ExifLoader.html#df32d13dbadcf6fdda9a146ff1408ce6state ) {
00217                 case exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcaf0ae4adb5f353212460dd6ae1bb13275dEL_EXIF_FOUND :
00218                         if (! exif-loader_8c.html#3ce49c0fdecf1d582239abc67c8a0987exif_loader_copy  (eld, eld-> struct__ExifLoader.html#d4a31084fa944d3895c440f14254f428b  + i,
00219                                         sizeof (eld->b) - i)) 
00220                                 return 0;
00221                         return exif-loader_8c.html#3ce49c0fdecf1d582239abc67c8a0987exif_loader_copy  (eld, buf, len);
00222                 case exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcaf8beb68fb14445a05a6909a2e341cd68bEL_SKIP_BYTES :
00223                         eld->size--;
00224                         if (!eld->size) 
00225                                 eld->state = exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcafb6dfdc745c1d1dfaac2329a3356da91aEL_READ ;
00226                         break;
00227 
00228                 case exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcafeaf6aac6035d833cdc1bcc26e0a7cbe6EL_READ_SIZE_BYTE_24 :
00229                         eld->size |= eld->b[i] << 24;
00230                         eld->state = exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcaf34283faa3192715dd938ec90b323e410EL_READ_SIZE_BYTE_16 ;
00231                         break;
00232                 case exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcaf34283faa3192715dd938ec90b323e410EL_READ_SIZE_BYTE_16 :
00233                         eld->size |= eld->b[i] << 16;
00234                         eld->state = exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcafda4deba1789e12fca5362ec998d3a640EL_READ_SIZE_BYTE_08 ;
00235                         break;
00236                 case exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcafda4deba1789e12fca5362ec998d3a640EL_READ_SIZE_BYTE_08 :
00237                         eld->size |= eld->b[i] << 8;
00238                         eld->state = exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcaf584adefdbfb199ff2203cbae469a42a6EL_READ_SIZE_BYTE_00 ;
00239                         break;
00240                 case exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcaf584adefdbfb199ff2203cbae469a42a6EL_READ_SIZE_BYTE_00 :
00241                         eld->size |= eld->b[i] << 0;
00242                         switch (eld->data_format) {
00243                         case exif-loader_8c.html#80b45ce64cc31ede356f1f174353998e5ca26bff4b4b0128341a711386d050a0EL_DATA_FORMAT_JPEG :
00244                                 eld->state = exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcaf8beb68fb14445a05a6909a2e341cd68bEL_SKIP_BYTES ;
00245                                 eld->size -= 2;
00246                                 break;
00247                         case exif-loader_8c.html#80b45ce64cc31ede356f1f174353998ec5b71d4c2d47135adc051e4d89e5e6ecEL_DATA_FORMAT_FUJI_RAW :
00248                                 eld->data_format = exif-loader_8c.html#80b45ce64cc31ede356f1f174353998ec42e976a8d8105dae8e87f33c85df8c1EL_DATA_FORMAT_EXIF ;
00249                                 eld->state = exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcaf8beb68fb14445a05a6909a2e341cd68bEL_SKIP_BYTES ;
00250                                 eld->size -= 86;
00251                                 break;
00252                         case exif-loader_8c.html#80b45ce64cc31ede356f1f174353998ec42e976a8d8105dae8e87f33c85df8c1EL_DATA_FORMAT_EXIF :
00253                                 eld->state = exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcaf0ae4adb5f353212460dd6ae1bb13275dEL_EXIF_FOUND ;
00254                                 break;
00255                         default:
00256                                 break;
00257                         }
00258                         break;
00259 
00260                 default:
00261                         switch (eld->b[i]) {
00262                         case exif-data_8c.html#203cbb3604314163bb57300f8a2aa886JPEG_MARKER_APP1 :
00263                                 eld->data_format = exif-loader_8c.html#80b45ce64cc31ede356f1f174353998ec42e976a8d8105dae8e87f33c85df8c1EL_DATA_FORMAT_EXIF ;
00264                                 eld->size = 0;
00265                                 eld->state = exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcafda4deba1789e12fca5362ec998d3a640EL_READ_SIZE_BYTE_08 ;
00266                                 break;
00267                         case exif-data_8c.html#7385540b8a640c8d67cf453b14aeddb3JPEG_MARKER_APP0 :
00268                         case exif-loader_8c.html#10ab07534f9e7f4eec09e70883bbe0aaJPEG_MARKER_APP13 :
00269                         case exif-loader_8c.html#719b108208ebd0be85200daba6c2ac2aJPEG_MARKER_COM :
00270                                 eld->data_format = exif-loader_8c.html#80b45ce64cc31ede356f1f174353998e5ca26bff4b4b0128341a711386d050a0EL_DATA_FORMAT_JPEG ;
00271                                 eld->size = 0;
00272                                 eld->state = exif-loader_8c.html#b8928f13e886fc85d6f580906a82fcafda4deba1789e12fca5362ec998d3a640EL_READ_SIZE_BYTE_08 ;
00273                                 break;
00274                         case 0xff:
00275                         case exif-data_8c.html#08365525ee0dff7ff58f8231305c3e89JPEG_MARKER_SOI :
00276                                 break;
00277                         default:
00278                                 exif-log_8c.html#2252b03f7df6cd3688d6647cd7ba3fccexif_log  (eld->log,
00279                                         exif-log_8h.html#d7dbc9f25878759b54247de66204b7f2375f88a49d1bdaaafc38597bf60e6d25EXIF_LOG_CODE_CORRUPT_DATA ,
00280                                         "ExifLoader", i18n_8h.html#709240620a80c25aca1c4e2576c3cba8_ ("The data supplied " 00281                                                 "does not seem to contain " 00282                                                 "EXIF data."));
00283                                 exif-loader_8c.html#51d59ed232fbdcbb22165a895ff12ac9exif_loader_reset  (eld);
00284                                 return 0;
00285                         }
00286                 }
00287 
00288         /* 00289          * If we reach this point, the buffer has not been big enough 00290          * to read all data we need. Fill it with new data. 00291          */ 00292         eld->b_len = 0;
00293         return exif-loader_8c.html#f3f1cad8e97e98dfbe5bdab0a66c8f6eexif_loader_write  (eld, buf, len);
00294 }
00295 
00296 struct__ExifLoader.htmlExifLoader  *
exif-loader_8h.html#3950d3770c3b0b5960e6f9818cac759e00297  exif-loader_8c.html#3950d3770c3b0b5960e6f9818cac759eexif_loader_new  (void)
00298 {
00299         struct__ExifMem.htmlExifMem  *mem = exif-mem_8c.html#44af1bc2ce5eecf37e731c5fe5dc98e0exif_mem_new_default  ();
00300         struct__ExifLoader.htmlExifLoader  *l = exif-loader_8c.html#7b02d813f2279eca2671c2fc10926418exif_loader_new_mem  (mem);
00301 
00302         exif-mem_8c.html#fd6959367336c1459125c43e3f16fec8exif_mem_unref  (mem);
00303 
00304         return l;
00305 }
00306 
00307 struct__ExifLoader.htmlExifLoader  *
exif-loader_8h.html#11d3d2970d4871abdc138b1a5d1d07de00308  exif-loader_8c.html#7b02d813f2279eca2671c2fc10926418exif_loader_new_mem  ( struct__ExifMem.htmlExifMem  *mem)
00309 {
00310         struct__ExifLoader.htmlExifLoader  *loader;
00311 
00312         if (!mem) 
00313                 return NULL;
00314         
00315         loader = exif-mem_8c.html#28065115ce31c8c9c7701df5b3f4ada5exif_mem_alloc  (mem, sizeof ( struct__ExifLoader.htmlExifLoader ));
00316         if (!loader) 
00317                 return NULL;
00318         loader-> struct__ExifLoader.html#5bd5e067833806862766076feb41bd08ref_count  = 1;
00319 
00320         loader-> struct__ExifLoader.html#1d985a175f46195e2b6a0bdb99450778mem  = mem;
00321         exif-mem_8c.html#5e444d744fdb19c0c8d4438d9aad2b0bexif_mem_ref  (mem);
00322 
00323         return loader;
00324 }
00325 
00326 void exif-loader_8h.html#fe15eff848060a9e56fb11e2ef3aaa6100327  exif-loader_8c.html#4fa33f3eeec65c51ddd00b0b4a52acceexif_loader_ref  ( struct__ExifLoader.htmlExifLoader  *loader)
00328 {
00329         if (loader) 
00330                 loader-> struct__ExifLoader.html#5bd5e067833806862766076feb41bd08ref_count ++;
00331 }
00332 
00333 static void exif-loader_8c.html#3156acaa940282fc116e06578a6d971300334  exif-loader_8c.html#3156acaa940282fc116e06578a6d9713exif_loader_free  ( struct__ExifLoader.htmlExifLoader  *loader)
00335 {
00336         struct__ExifMem.htmlExifMem  *mem;
00337 
00338         if (!loader) 
00339                 return;
00340 
00341         mem = loader-> struct__ExifLoader.html#1d985a175f46195e2b6a0bdb99450778mem ;
00342         exif-loader_8c.html#51d59ed232fbdcbb22165a895ff12ac9exif_loader_reset  (loader);
00343         exif-mem_8c.html#c18517acd3216e21942966d3dfab5f53exif_mem_free  (mem, loader);
00344         exif-mem_8c.html#fd6959367336c1459125c43e3f16fec8exif_mem_unref  (mem);
00345 }
00346         
00347 void exif-loader_8h.html#203cce070cbc40dfd6924a89216d9baa00348  exif-loader_8c.html#0a31eab6b3bc0d2a7d935da2c25e114bexif_loader_unref  ( struct__ExifLoader.htmlExifLoader  *loader)
00349 {
00350         if (!loader) 
00351                 return;
00352         if (!--loader-> struct__ExifLoader.html#5bd5e067833806862766076feb41bd08ref_count )
00353                 exif-loader_8c.html#3156acaa940282fc116e06578a6d9713exif_loader_free  (loader);
00354 }
00355 
00356 void exif-loader_8h.html#63cb343cbb3f7fdeb56a57e86651dbe100357  exif-loader_8c.html#51d59ed232fbdcbb22165a895ff12ac9exif_loader_reset  ( struct__ExifLoader.htmlExifLoader  *loader)
00358 {
00359         if (!loader) 
00360                 return;
00361         exif-mem_8c.html#c18517acd3216e21942966d3dfab5f53exif_mem_free  (loader-> struct__ExifLoader.html#1d985a175f46195e2b6a0bdb99450778mem , loader-> struct__ExifLoader.html#f6156223d04383748a9fca2de12e48c5buf ); loader-> struct__ExifLoader.html#f6156223d04383748a9fca2de12e48c5buf  = NULL;
00362         loader-> struct__ExifLoader.html#61d320036abb598446c4d2ed6c01cc89size  = 0;
00363         loader-> struct__ExifLoader.html#494e639f6d9649a1b7998c5ee26d2056bytes_read  = 0;
00364         loader-> struct__ExifLoader.html#df32d13dbadcf6fdda9a146ff1408ce6state  = 0;
00365         loader-> struct__ExifLoader.html#3275265a7768bf887c3e6132bc840102b_len  = 0;
00366         loader-> struct__ExifLoader.html#a425536e01e8a6de9902cbd50b24189edata_format  = exif-loader_8c.html#80b45ce64cc31ede356f1f174353998e74adf2397e53e892793d03496bdcff45EL_DATA_FORMAT_UNKNOWN ;
00367 }
00368 
00369 struct__ExifData.htmlExifData  *
exif-loader_8h.html#89194217d03d23bf1036bd2abec018e200370  exif-loader_8c.html#4f42fd6580d0cc1bda2822c8232d63f1exif_loader_get_data  ( struct__ExifLoader.htmlExifLoader  *loader)
00371 {
00372         struct__ExifData.htmlExifData  *ed;
00373 
00374         if (!loader) 
00375                 return NULL;
00376 
00377         ed = exif-data_8c.html#c8043bebb5ba91fe6799709a11c0c15cexif_data_new_mem  (loader-> struct__ExifLoader.html#1d985a175f46195e2b6a0bdb99450778mem );
00378         exif-data_8c.html#8c849acb22b25d075a2863fe1cbf3c42exif_data_log  (ed, loader-> struct__ExifLoader.html#f463007ba33832569bbe645fa37c2cedlog );
00379         exif-data_8c.html#df73ed60ae962be794a7514083552c02exif_data_load_data  (ed, loader-> struct__ExifLoader.html#f6156223d04383748a9fca2de12e48c5buf , loader-> struct__ExifLoader.html#494e639f6d9649a1b7998c5ee26d2056bytes_read );
00380 
00381         return ed;
00382 }
00383 
00384 void exif-loader_8h.html#a54bf00b3bf8073ae8acae81a6963ea400385  exif-loader_8c.html#ebbacfe1a6ffa7bd20bebcb9d51a9051exif_loader_log  ( struct__ExifLoader.htmlExifLoader  *loader, struct__ExifLog.htmlExifLog  *log)
00386 {
00387         if (!loader) 
00388                 return;
00389         exif-log_8c.html#a4f16b2e2aa992cd5d1598fbf68d2fb7exif_log_unref  (loader-> struct__ExifLoader.html#f463007ba33832569bbe645fa37c2cedlog );
00390         loader-> struct__ExifLoader.html#f463007ba33832569bbe645fa37c2cedlog  = log;
00391         exif-log_8c.html#926f0e50e2afab52db87acfbf76ff878exif_log_ref  (log);
00392 }
Generated on Sun Apr 23 01:22:39 2006 for EXIF library (libexif) Internals by 
http://www.doxygen.org/index.htmldoxygen  1.4.6 