LCOV - code coverage report
Current view: top level - frmts/pcidsk/sdk/core - clinksegment.cpp (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 0 46 0.0 %
Date: 2024-11-21 22:18:42 Functions: 0 10 0.0 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  *
       3             :  * Purpose:  Implementation of the CLinkSegment class.
       4             :  *
       5             :  ******************************************************************************
       6             :  * Copyright (c) 2009
       7             :  * PCI Geomatics, 90 Allstate Parkway, Markham, Ontario, Canada.
       8             :  *
       9             :  * SPDX-License-Identifier: MIT
      10             :  ****************************************************************************/
      11             : 
      12             : #include "core/clinksegment.h"
      13             : #include "segment/cpcidsksegment.h"
      14             : #include "core/pcidsk_utils.h"
      15             : #include "pcidsk_exception.h"
      16             : 
      17             : #include <vector>
      18             : #include <string>
      19             : #include <cassert>
      20             : #include <cstring>
      21             : 
      22             : using namespace PCIDSK;
      23             : 
      24           0 : CLinkSegment::CLinkSegment(PCIDSKFile *fileIn,
      25             :                            int segmentIn,
      26           0 :                            const char *segment_pointer) :
      27             :     CPCIDSKSegment(fileIn, segmentIn, segment_pointer),
      28           0 :     loaded_(false), modified_(false)
      29             : {
      30           0 :     Load();
      31           0 : }
      32             : 
      33             : 
      34           0 : CLinkSegment::~CLinkSegment()
      35             : {
      36           0 : }
      37             : 
      38             : // Load the contents of the segment
      39           0 : void CLinkSegment::Load()
      40             : {
      41             :     // Check if we've already loaded the segment into memory
      42           0 :     if (loaded_) {
      43           0 :         return;
      44             :     }
      45             : 
      46           0 :     seg_data.SetSize(data_size < 1024 ? -1 : (int) (data_size - 1024));
      47             : 
      48           0 :     ReadFromFile(seg_data.buffer, 0, data_size - 1024);
      49             : 
      50           0 :     if (seg_data.buffer_size < 8)
      51             :     {
      52           0 :         path.clear();
      53           0 :         return;
      54             :     }
      55             : 
      56           0 :     if (!STARTS_WITH(seg_data.buffer, "SysLinkF"))
      57             :     {
      58           0 :         seg_data.Put("SysLinkF",0,8);
      59           0 :         return;
      60             :     }
      61             : 
      62           0 :     const char * pszEnd = seg_data.buffer + seg_data.buffer_size;
      63           0 :     const char * pszPathStart = seg_data.buffer + 8;
      64           0 :     const char * pszPathEnd = pszPathStart;
      65             : 
      66             :     // Find the end of the path.
      67           0 :     while (pszPathEnd < pszEnd && *pszPathEnd)
      68           0 :         ++pszPathEnd;
      69             : 
      70             :     // Remove trailing spaces.
      71           0 :     while (pszPathEnd > pszPathStart && *pszPathEnd == ' ')
      72           0 :         --pszPathEnd;
      73             : 
      74           0 :     path = std::string(pszPathStart, pszPathEnd);
      75             : 
      76             :     // We've now loaded the structure up with data. Mark it as being loaded
      77             :     // properly.
      78           0 :     loaded_ = true;
      79             : 
      80             : }
      81             : 
      82           0 : void CLinkSegment::Write(void)
      83             : {
      84             :     //We are not writing if nothing was loaded.
      85           0 :     if (!modified_) {
      86           0 :         return;
      87             :     }
      88             : 
      89           0 :     seg_data.Put("SysLinkF",0,8);
      90           0 :     seg_data.Put(path.c_str(), 8, static_cast<int>(path.size()), true);
      91             : 
      92           0 :     WriteToFile(seg_data.buffer, 0, data_size-1024);
      93           0 :     modified_ = false;
      94             : }
      95             : 
      96           0 : std::string CLinkSegment::GetPath(void) const
      97             : {
      98           0 :     return path;
      99             : }
     100             : 
     101           0 : void CLinkSegment::SetPath(const std::string& oPath)
     102             : {
     103           0 :     if(oPath.size() < 504)
     104             :     {
     105           0 :         path = oPath;
     106           0 :         modified_ = true;
     107             :     }
     108             :     else
     109             :     {
     110           0 :         return ThrowPCIDSKException("The size of the path cannot be"
     111           0 :                               " bigger than 504 characters.");
     112             :     }
     113             : }
     114             : 
     115           0 : void CLinkSegment::Synchronize()
     116             : {
     117           0 :     if(modified_)
     118             :     {
     119           0 :         this->Write();
     120             :     }
     121           0 : }
     122             : 

Generated by: LCOV version 1.14