changeset 31101:f24d7bcad2d3

Partially fixed formatting of C++ code
author magedrifaat <magedrifaat@gmail.com>
date Wed, 29 Jun 2022 02:27:54 +0200
parents 4c606686d4ef
children d6ecf0e8838b
files libinterp/dldfcn/__tiff__.cc
diffstat 1 files changed, 317 insertions(+), 284 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/dldfcn/__tiff__.cc	Tue Jun 28 06:03:39 2022 +0200
+++ b/libinterp/dldfcn/__tiff__.cc	Wed Jun 29 02:27:54 2022 +0200
@@ -10,383 +10,416 @@
 
 // TODO(maged): Tidy up the formatting to be consistant with octave
 
-void validate_tiff_get_field(bool status, void *p_to_free=NULL)
+// Error if status is not 1 (success status for TIFFGetField)
+void
+validate_tiff_get_field (bool status, void *p_to_free=NULL)
 {
-    if (!status)
-    {
+    if (status != 1)
+      {
         if (p_to_free != NULL)
-            _TIFFfree(p_to_free);
-        error("Failed to read tag");
-    }
+          _TIFFfree (p_to_free);
+        error ("Failed to read tag");
+      }
 }
 
-octave_value_list interpret_data(void *data, uint32_t count, TIFFDataType tag_datatype)
+// Convert memory buffer into suitable octave values
+// depending on tag_datatype
+octave_value_list
+interpret_data (void *data, uint32_t count, TIFFDataType tag_datatype)
 {
-    // TODO(maged): Find the correct way fo returning multivalues (Matrix for numericals?)
-    octave_value_list ovl_data;
-    dim_vector arr_dims(1, count);
-    if (tag_datatype == TIFF_BYTE || tag_datatype == TIFF_UNDEFINED)
+  // TODO(maged): Find the correct way fo returning multivalues
+  octave_value_list ovl_data;
+  dim_vector arr_dims (1, count);
+
+  switch (tag_datatype)
     {
-        uint8NDArray arr(arr_dims);
+    case TIFF_BYTE:
+    case TIFF_UNDEFINED:
+      {
+        uint8NDArray arr (arr_dims);
         for (uint32_t i = 0; i < count; i++)
-        {
+          {
             arr(i) = ((uint8_t *)data)[i];
-        }
+          }
         ovl_data(0) = arr;
-    }
-    else if(tag_datatype == TIFF_ASCII)
-    {
+        break;
+      }
+    case TIFF_ASCII:
+      {
         ovl_data(0) = *(char **)data;
-    }
-    else if (tag_datatype == TIFF_SHORT)
-    {
-        uint16NDArray arr(arr_dims);
+        break;
+      }
+    case TIFF_SHORT:
+      {
+        uint16NDArray arr (arr_dims);
         for (uint32_t i = 0; i < count; i++)
-        {
+          {
             arr(i) = ((uint16_t *)data)[i];
-        }
+          }
         ovl_data(0) = arr;
-    }
-    else if (tag_datatype == TIFF_LONG)
-    {
-        uint32NDArray arr(arr_dims);
+        break;
+      }
+    case TIFF_LONG:
+      {
+        uint32NDArray arr (arr_dims);
         for (uint32_t i = 0; i < count; i++)
-        {
+          {
             arr(i) = ((uint32_t *)data)[i];
-        }
+          }
         ovl_data(0) = arr;
-    }
-    else if (tag_datatype == TIFF_LONG8)
-    {
-        uint64NDArray arr(arr_dims);
+        break;
+      }
+    case TIFF_LONG8:
+      {
+        uint64NDArray arr (arr_dims);
         for (uint32_t i = 0; i < count; i++)
-        {
+          {
             arr(i) = ((uint64_t *)data)[i];
-        }
+          }
         ovl_data(0) = arr;
-    }
-    else if (tag_datatype == TIFF_RATIONAL)
-    {
-        NDArray arr(arr_dims);
+        break;
+      }
+    case TIFF_RATIONAL:
+      {
+        NDArray arr (arr_dims);
         for (uint32_t i = 0; i < count; i+=2)
-        {
-            arr(i / 2) = (float)((uint32_t *)data)[i] / (float)((uint32_t *)data)[i+1];
-        }
-        ovl_data(0) = arr;
-    }
-    else if (tag_datatype == TIFF_SBYTE)
-    {
-        int8NDArray arr(arr_dims);
-        for (uint32_t i = 0; i < count; i++)
-        {
-            arr(i) = ((int8_t *)data)[i];
-        }
+          {
+            arr(i / 2) = (float)((uint32_t *)data)[i] 
+                          / (float)((uint32_t *)data)[i+1];
+          }
         ovl_data(0) = arr;
-    }
-    else if (tag_datatype == TIFF_SSHORT)
-    {
-        int16NDArray arr(arr_dims);
+        break;
+      }
+    case TIFF_SBYTE:
+      {
+        int8NDArray arr (arr_dims);
         for (uint32_t i = 0; i < count; i++)
-        {
-            arr(i) = ((int16_t *)data)[i];
-        }
+          {
+            arr(i) = ((int8_t *)data)[i];
+          }
         ovl_data(0) = arr;
-    }
-    else if (tag_datatype == TIFF_SLONG)
-    {
-        int32NDArray arr(arr_dims);
+        break;
+      }
+    case TIFF_SSHORT:
+      {
+        int16NDArray arr (arr_dims);
         for (uint32_t i = 0; i < count; i++)
-        {
-            arr(i) = ((int32_t *)data)[i];
-        }
+          {
+            arr(i) = ((int16_t *)data)[i];
+          }
         ovl_data(0) = arr;
-    }
-    else if (tag_datatype == TIFF_SLONG8)
-    {
-        int64NDArray arr(arr_dims);
+        break;
+      }
+    case TIFF_SLONG:
+      {
+        int32NDArray arr (arr_dims);
         for (uint32_t i = 0; i < count; i++)
-        {
-            arr(i) = ((int64_t *)data)[i];
-        }
+          {
+            arr(i) = ((int32_t *)data)[i];
+          }
         ovl_data(0) = arr;
-    }
-    else if (tag_datatype == TIFF_FLOAT)
-    {
-        NDArray arr(arr_dims);
+        break;
+      }
+    case TIFF_SLONG8:
+      {
+        int64NDArray arr (arr_dims);
         for (uint32_t i = 0; i < count; i++)
-        {
+          {
+            arr(i) = ((int64_t *)data)[i];
+          }
+        ovl_data(0) = arr;
+        break;
+      }
+    case TIFF_FLOAT:
+      {
+        NDArray arr (arr_dims);
+        for (uint32_t i = 0; i < count; i++)
+          {
             arr(i) = ((float *)data)[i];
-        }
+          }
         ovl_data(0) = arr;
-    }
-    else if (tag_datatype == TIFF_DOUBLE)
-    {
-        NDArray arr(arr_dims);
+        break;
+      }
+    case TIFF_DOUBLE:
+      {
+        NDArray arr (arr_dims);
         for (uint32_t i = 0; i < count; i++)
         {
             arr(i) = ((double *)data)[i];
         }
         ovl_data(0) = arr;
-    }
-    else if (tag_datatype == TIFF_SRATIONAL)
-    {
-        NDArray arr(arr_dims);
+        break;
+      }
+    case TIFF_SRATIONAL:
+      {
+        NDArray arr (arr_dims);
         for (uint32_t i = 0; i < count; i+=2)
-        {
-            arr(i / 2) = (float)((int32_t *)data)[i] / (float)((int32_t *)data)[i+1];
-        }
+          {
+            arr(i / 2) = (float)((int32_t *)data)[i] 
+                          / (float)((int32_t *)data)[i+1];
+          }
         ovl_data(0) = arr;
-    }
-    else if (tag_datatype == TIFF_IFD || tag_datatype == TIFF_IFD8)
-    {
-        // TODO(maged): implement IFD datatype?
-        error("Unimplemented IFFD data type");
-    }
-    else
-    {
-        // TODO(maged): find the correct response in this case
-        error("Unsupported tag data type");
+        break;
+      }
+    case TIFF_IFD:
+    case TIFF_IFD8:
+      // TODO(maged): implement IFD datatype?
+      error ("Unimplemented IFFD data type");
+      break;
+    default:
+      error ("Unsupported tag data type");
     }
 
-    return ovl_data;
+  return ovl_data;
 }
 
-octave_value_list get_scalar_field_data(TIFF *tif, const TIFFField *fip)
+octave_value_list
+get_scalar_field_data (TIFF *tif, const TIFFField *fip)
 {
-    octave_value_list tag_data_ovl;
-    uint32_t tag_ID = TIFFFieldTag(fip);
+  octave_value_list tag_data_ovl;
+  uint32_t tag_id = TIFFFieldTag (fip);
 
-    // TIFFFieldReadCount returns VARIABLE for some scalar tags (e.g. Compression)
-    // But TIFFFieldPassCount seems consistent
-    validate_tiff_get_field(!TIFFFieldPassCount(fip));
-    // TODO(maged): test this function vs actual data type size
-    int type_size = TIFFDataWidth(TIFFFieldDataType(fip));
-    void *data = _TIFFmalloc(type_size);
-    validate_tiff_get_field(TIFFGetField(tif, tag_ID, data), data);
-    tag_data_ovl = interpret_data(data, 1, TIFFFieldDataType(fip));
-    _TIFFfree(data);
+  // TIFFFieldReadCount returns VARIABLE for some scalar tags
+  // (e.g. Compression) But TIFFFieldPassCount seems consistent
+  // Since scalar tags are the last to be handled, any tag that
+  // require a count to be passed is an unsupported tag.
+  if (TIFFFieldPassCount (fip))
+    error ("Unsupported tag");
+  
+  // TODO(maged): test this function vs actual data type size
+  int type_size = TIFFDataWidth (TIFFFieldDataType (fip));
+  void *data = _TIFFmalloc (type_size);
+  validate_tiff_get_field (TIFFGetField (tif, tag_id, data), data);
+  tag_data_ovl = interpret_data (data, 1, TIFFFieldDataType (fip));
+  _TIFFfree (data);
 
-    return tag_data_ovl;
+  return tag_data_ovl;
 }
 
-octave_value_list get_array_field_data(TIFF *tif, const TIFFField *fip, uint32_t array_size)
+octave_value_list
+get_array_field_data (TIFF *tif, const TIFFField *fip, uint32_t array_size)
 {
-    octave_value_list tag_data_ovl;
-
-    uint32_t tag_ID = TIFFFieldTag(fip);
-    TIFFDataType tag_datatype = TIFFFieldDataType(fip);
-    void *data;
-    validate_tiff_get_field(TIFFGetField(tif, tag_ID, &data));
+  void *data;
+  validate_tiff_get_field (TIFFGetField (tif, TIFFFieldTag (fip), &data));
     
-    return interpret_data(data, array_size, tag_datatype);
+  return interpret_data (data, array_size, TIFFFieldDataType (fip));
 }
 
-octave_value_list get_field_data(TIFF *tif, const TIFFField *fip)
+octave_value_list
+get_field_data (TIFF *tif, const TIFFField *fip)
 {
-    octave_value_list tag_data_ovl;
-    uint32_t tag_ID = TIFFFieldTag(fip);
+  octave_value_list tag_data_ovl;
+  uint32_t tag_id = TIFFFieldTag (fip);
 
-    // TODO(maged): find/create images to test the special tags
-    switch(tag_ID)
+  // TODO(maged): find/create images to test the special tags
+  switch (tag_id)
     {
-        case TIFFTAG_STRIPBYTECOUNTS:
-        case TIFFTAG_STRIPOFFSETS:
-            tag_data_ovl = get_array_field_data(tif, fip, TIFFNumberOfStrips(tif));
-            break;
-        case TIFFTAG_TILEBYTECOUNTS:
-        case TIFFTAG_TILEOFFSETS:
-            tag_data_ovl = get_array_field_data(tif, fip, TIFFNumberOfTiles(tif));
-            break;
-        case TIFFTAG_YCBCRCOEFFICIENTS:
-            tag_data_ovl = get_array_field_data(tif, fip, 3);
-            break;
-        case TIFFTAG_REFERENCEBLACKWHITE:
-            tag_data_ovl = get_array_field_data(tif, fip, 6);
-            break;
-        // colormap is not always 3 channels, but libtiff hardcodes it as 3
-        case TIFFTAG_COLORMAP:
-            {
-                uint16_t bits_per_sample;
-                if (!TIFFGetField(tif, TIFFTAG_BITSPERSAMPLE, &bits_per_sample))
-                {
-                    error("Failed to obtain the bit depth");
-                }
-                
-                if (bits_per_sample > 24)
-                {
-                    error("Too high bit depth for a palette image");
-                }
+    case TIFFTAG_STRIPBYTECOUNTS:
+    case TIFFTAG_STRIPOFFSETS:
+      tag_data_ovl = get_array_field_data (tif, fip, 
+                                           TIFFNumberOfStrips (tif));
+      break;
+    case TIFFTAG_TILEBYTECOUNTS:
+    case TIFFTAG_TILEOFFSETS:
+      tag_data_ovl = get_array_field_data (tif, fip, TIFFNumberOfTiles (tif));
+      break;
+    case TIFFTAG_YCBCRCOEFFICIENTS:
+      tag_data_ovl = get_array_field_data (tif, fip, 3);
+      break;
+    case TIFFTAG_REFERENCEBLACKWHITE:
+      tag_data_ovl = get_array_field_data (tif, fip, 6);
+      break;
+    case TIFFTAG_COLORMAP:
+      {
+        uint16_t bits_per_sample;
+        if (! TIFFGetField (tif, TIFFTAG_BITSPERSAMPLE, &bits_per_sample))
+          error ("Failed to obtain the bit depth");
+              
+        if (bits_per_sample > 24)
+          error ("Too high bit depth for a palette image");
 
-                uint32_t count = 1<<bits_per_sample;
-                uint16_t *red, *green, *blue;
-                validate_tiff_get_field(TIFFGetField(tif, TIFFTAG_COLORMAP, &red, &green, &blue));
-                tag_data_ovl(0) = octave_value(interpret_data(red, count, TIFFFieldDataType(fip)));
-                tag_data_ovl(1) = octave_value(interpret_data(green, count, TIFFFieldDataType(fip)));
-                tag_data_ovl(2) = octave_value(interpret_data(blue, count, TIFFFieldDataType(fip)));
-            }
-            break;
-        case TIFFTAG_TRANSFERFUNCTION:
-            {
-                uint16_t samples_per_pixel;
-                if (!TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &samples_per_pixel))
-                {
-                    error("Failed to obtain the number of samples per pixel");
-                }
+        uint32_t count = 1 << bits_per_sample;
+        uint16_t *red, *green, *blue;
+        validate_tiff_get_field (TIFFGetField (tif, TIFFTAG_COLORMAP,
+                                               &red, &green, &blue));
+        tag_data_ovl(0) 
+          = octave_value (interpret_data (red, count,
+                                          TIFFFieldDataType (fip)));
+        tag_data_ovl(1) 
+          = octave_value (interpret_data (green, count,
+                                          TIFFFieldDataType (fip)));
+        tag_data_ovl(2) 
+          = octave_value (interpret_data (blue, count,
+                                          TIFFFieldDataType (fip)));
+        
+        break;
+      }
+    case TIFFTAG_TRANSFERFUNCTION:
+      {
+        uint16_t samples_per_pixel;
+        if (! TIFFGetField (tif, TIFFTAG_SAMPLESPERPIXEL, &samples_per_pixel))
+          error ("Failed to obtain the number of samples per pixel");
 
-                uint16_t bits_per_sample;
-                if (!TIFFGetField(tif, TIFFTAG_BITSPERSAMPLE, &bits_per_sample))
-                {
-                    error("Failed to obtain the number of samples per pixel");
-                }
+        uint16_t bits_per_sample;
+        if (! TIFFGetField (tif, TIFFTAG_BITSPERSAMPLE, &bits_per_sample))
+          error ("Failed to obtain the number of samples per pixel");
 
-                uint32_t count = 1<<bits_per_sample;
-                uint16_t *ch1, *ch2, *ch3;
-                if (samples_per_pixel == 1)
-                {
-                    validate_tiff_get_field(TIFFGetField(tif, TIFFTAG_COLORMAP, &ch1));
-                    tag_data_ovl(0) = octave_value(interpret_data(ch1, count, TIFFFieldDataType(fip)));
-                }
-                else
-                {
-                    validate_tiff_get_field(TIFFGetField(tif, TIFFTAG_COLORMAP, &ch1, &ch2, &ch3));
-                    tag_data_ovl(0) = octave_value(interpret_data(ch1, count, TIFFFieldDataType(fip)));
-                    tag_data_ovl(1) = octave_value(interpret_data(ch2, count, TIFFFieldDataType(fip)));
-                    tag_data_ovl(2) = octave_value(interpret_data(ch3, count, TIFFFieldDataType(fip)));
-                }
-            }
-            break;
-        case TIFFTAG_PAGENUMBER:
-        case TIFFTAG_HALFTONEHINTS:
-        case TIFFTAG_DOTRANGE:
-        case TIFFTAG_YCBCRSUBSAMPLING:
-            {
-                uint16_t tag_part1, tag_part2;
-                validate_tiff_get_field(TIFFGetField(tif, tag_ID, &tag_part1, &tag_part2));
-                tag_data_ovl(0) = octave_value(interpret_data(&tag_part1, 1, TIFFFieldDataType(fip)));
-                tag_data_ovl(1) = octave_value(interpret_data(&tag_part2, 1, TIFFFieldDataType(fip)));
-            }
-            break;
-        case TIFFTAG_SUBIFD:
-            {
-                uint16_t count;
-                uint64_t *offsets;
-                validate_tiff_get_field(TIFFGetField(tif, tag_ID, &count, &offsets));
-                tag_data_ovl = interpret_data(offsets, count, TIFFFieldDataType(fip));
-            }
-            break;
-        case TIFFTAG_EXTRASAMPLES:
-            {
-                uint16_t count;
-                uint16_t *types;
-                validate_tiff_get_field(TIFFGetField(tif, tag_ID, &count, &types));
-                tag_data_ovl = interpret_data(types, count, TIFFFieldDataType(fip));
-            }
-            break;
-        // TODO(maged): Do I just return bytes? pass it to some parser lib?
-        case TIFFTAG_XMLPACKET:
-        case TIFFTAG_RICHTIFFIPTC:
-        case TIFFTAG_PHOTOSHOP:
-        case TIFFTAG_ICCPROFILE:
-            {
-                uint16_t count;
-                void *data;
-                validate_tiff_get_field(TIFFGetField(tif, tag_ID, &count, &data));
-                tag_data_ovl = interpret_data(data, count, TIFF_BYTE);
-            }
-            break;
-        default:
-            tag_data_ovl = get_scalar_field_data(tif, fip);
-    }
-    
-    return tag_data_ovl;
+        uint32_t count = 1 << bits_per_sample;
+        uint16_t *ch1, *ch2, *ch3;
+        if (samples_per_pixel == 1)
+          {
+            validate_tiff_get_field (TIFFGetField (tif, TIFFTAG_COLORMAP, &ch1));
+            tag_data_ovl(0) 
+              = octave_value (interpret_data (ch1, count,
+                                              TIFFFieldDataType (fip)));
+          }
+        else
+          {
+            validate_tiff_get_field (TIFFGetField (tif, TIFFTAG_COLORMAP,
+                                                   &ch1, &ch2, &ch3));
+            tag_data_ovl(0)
+              = octave_value (interpret_data (ch1, count,
+                                              TIFFFieldDataType (fip)));
+            tag_data_ovl(1)
+              = octave_value (interpret_data (ch2, count,
+                                              TIFFFieldDataType (fip)));
+            tag_data_ovl(2)
+              = octave_value (interpret_data (ch3, count,
+                                              TIFFFieldDataType (fip)));
+          }
+        break;
+      }
+    case TIFFTAG_PAGENUMBER:
+    case TIFFTAG_HALFTONEHINTS:
+    case TIFFTAG_DOTRANGE:
+    case TIFFTAG_YCBCRSUBSAMPLING:
+      {
+        uint16_t tag_part1, tag_part2;
+        validate_tiff_get_field (TIFFGetField (tif, tag_id,
+                                               &tag_part1, &tag_part2));
+        tag_data_ovl(0)
+          = octave_value (interpret_data (&tag_part1, 1,
+                                          TIFFFieldDataType (fip)));
+        tag_data_ovl(1)
+          = octave_value (interpret_data (&tag_part2, 1,
+                                          TIFFFieldDataType (fip)));
+        break;
+      }
+    case TIFFTAG_SUBIFD:
+      {
+        uint16_t count;
+        uint64_t *offsets;
+        validate_tiff_get_field (TIFFGetField (tif, tag_id, &count, &offsets));
+        tag_data_ovl = interpret_data (offsets, count, TIFFFieldDataType (fip));
+        break;
+      }
+    case TIFFTAG_EXTRASAMPLES:
+      {
+        uint16_t count;
+        uint16_t *types;
+        validate_tiff_get_field (TIFFGetField (tif, tag_id, &count, &types));
+        tag_data_ovl = interpret_data (types, count, TIFFFieldDataType (fip));
+        break;
+      }
+    // TODO(maged): Do I just return bytes? pass it to some parser lib?
+    case TIFFTAG_XMLPACKET:
+    case TIFFTAG_RICHTIFFIPTC:
+    case TIFFTAG_PHOTOSHOP:
+    case TIFFTAG_ICCPROFILE:
+      {
+        uint16_t count;
+        void *data;
+        validate_tiff_get_field (TIFFGetField (tif, tag_id, &count, &data));
+        tag_data_ovl = interpret_data (data, count, TIFF_BYTE);
+        break;
+      }
+    default:
+      tag_data_ovl = get_scalar_field_data (tif, fip);
+  }
+  
+  return tag_data_ovl;
 }
 
 DEFUN_DLD (__open_tiff__, args, nargout,
            "Open a Tiff file and return its handle")
 {
-    int nargin = args.length();
+  int nargin = args.length ();
 
-    if (nargin == 0 || nargin > 2)
+  if (nargin == 0 || nargin > 2)
     {
-        // TODO(maged): return invalid object instead??
-        error("No filename supplied\n");
+      // TODO(maged): return invalid object instead??
+      error ("No filename supplied\n");
     }
 
-    std::string filename = args(0).string_value();
-    std::string mode = "r";
+  std::string filename = args (0).string_value ();
+  std::string mode = "r";
 
-    // TODO(maged): check valid mode
-    if (nargin == 2)
-        mode = args(1).string_value();
-    
-    // TODO(maged): Look into unwind action
-    TIFF *tif = TIFFOpen(filename.c_str(), mode.c_str());
-    
-    if (!tif)
-        error("Failed to open Tiff file\n");
+  // TODO(maged): check valid mode
+  if (nargin == 2)
+    mode = args (1).string_value ();
+  
+  // TODO(maged): Look into unwind action
+  TIFF *tif = TIFFOpen (filename.c_str (), mode.c_str ());
+  
+  if (! tif)
+    error ("Failed to open Tiff file\n");
 
-    // TODO(maged): use inheritance of octave_base_value instead
-    octave_value tiff_ov = octave_value((uint64_t)tif);
-    return octave_value_list (tiff_ov);
+  // TODO(maged): use inheritance of octave_base_value instead
+  octave_value tiff_ov = octave_value ((uint64_t)tif);
+  return octave_value_list (tiff_ov);
 }
 
 
 DEFUN_DLD (__close_tiff__, args, nargout,
            "Close a tiff file")
 {
-    int nargin = args.length();
+  int nargin = args.length ();
 
-    if (nargin == 0)
-    {
-        error("No handle provided\n");
-    }
-    
-    TIFF *tif = (TIFF *)(args(0).uint64_value());
-    TIFFClose(tif);
+  if (nargin == 0)
+    error ("No handle provided\n");
+  
+  TIFF *tif = (TIFF *)(args (0).uint64_value ());
+  TIFFClose (tif);
 
-    return octave_value_list ();
+  return octave_value_list ();
 }
 
 
 DEFUN_DLD (__tiff_get_tag__, args, nargout,
            "Get the value of a tag from a tiff image")
 {
-    int nargin = args.length();
+    int nargin = args.length ();
 
     if (nargin == 0)
-    {
-        error("No handle provided\n");
-    }
+      error ("No handle provided\n");
     
     if (nargin < 2)
-    {
-        error("No tag name provided\n");
-    }
+      error ("No tag name provided\n");
     
-    TIFF *tif = (TIFF *)(args(0).uint64_value());
+    TIFF *tif = (TIFF *)(args (0).uint64_value ());
 
-    uint32_t tag_ID;
+    uint32_t tag_id;
     const TIFFField *fip;
-    if (args(1).type_name() == "string")
-    {
-        std::string tagName = args(1).string_value();
-        fip = TIFFFieldWithName(tif, tagName.c_str());
-        if (!fip)
-            error("Tiff tag not found");
+    if (args (1).type_name () == "string")
+      {
+        std::string tagName = args (1).string_value ();
+        fip = TIFFFieldWithName (tif, tagName.c_str ());
+        if (! fip)
+          error ("Tiff tag not found");
         
-        tag_ID = TIFFFieldTag(fip);
-    }
+        tag_id = TIFFFieldTag (fip);
+      }
     else
-    {
-        tag_ID = args(1).int_value();
-        fip = TIFFFieldWithTag(tif, tag_ID);
+      {
+        tag_id = args (1).int_value ();
+        fip = TIFFFieldWithTag (tif, tag_id);
         // TODO(maged): Handle other types of errors (e.g. unsupported tags)
-        if (!fip)
-            error("Tiff tag not found");
-    }
+        if (! fip)
+          error ("Tiff tag not found");
+      }
 
 
-    octave_value_list tag_data_ovl = get_field_data(tif, fip);
+    octave_value_list tag_data_ovl = get_field_data (tif, fip);
 
     return tag_data_ovl;
 }