Coverage Report

Created: 2025-06-09 07:07

/src/gdal/frmts/iso8211/ddfutils.cpp
Line
Count
Source (jump to first uncovered line)
1
/******************************************************************************
2
 *
3
 * Project:  ISO 8211 Access
4
 * Purpose:  Various utility functions.
5
 * Author:   Frank Warmerdam, warmerdam@pobox.com
6
 *
7
 ******************************************************************************
8
 * Copyright (c) 1999, Frank Warmerdam
9
 *
10
 * SPDX-License-Identifier: MIT
11
 ****************************************************************************/
12
13
#include "cpl_port.h"
14
#include "iso8211.h"
15
16
#include <cstdlib>
17
#include <cstring>
18
19
#include "cpl_conv.h"
20
21
/************************************************************************/
22
/*                             DDFScanInt()                             */
23
/*                                                                      */
24
/*      Read up to nMaxChars from the passed string, and interpret      */
25
/*      as an integer.                                                  */
26
/************************************************************************/
27
28
int DDFScanInt(const char *pszString, int nMaxChars)
29
30
7.57k
{
31
7.57k
    char szWorking[33] = {};
32
33
7.57k
    if (nMaxChars > 32 || nMaxChars == 0)
34
0
        nMaxChars = 32;
35
36
7.57k
    memcpy(szWorking, pszString, nMaxChars);
37
7.57k
    szWorking[nMaxChars] = '\0';
38
39
7.57k
    return atoi(szWorking);
40
7.57k
}
41
42
/************************************************************************/
43
/*                          DDFScanVariable()                           */
44
/*                                                                      */
45
/*      Establish the length of a variable length string in a           */
46
/*      record.                                                         */
47
/************************************************************************/
48
49
int DDFScanVariable(const char *pszRecord, int nMaxChars, int nDelimChar)
50
51
0
{
52
0
    int i = 0;  // Used after for.
53
54
0
    for (; i < nMaxChars - 1 && pszRecord[i] != nDelimChar; i++)
55
0
    {
56
0
    }
57
58
0
    return i;
59
0
}
60
61
/************************************************************************/
62
/*                          DDFFetchVariable()                          */
63
/*                                                                      */
64
/*      Fetch a variable length string from a record, and allocate      */
65
/*      it as a new string (with CPLStrdup()).                          */
66
/************************************************************************/
67
68
char *DDFFetchVariable(const char *pszRecord, int nMaxChars, int nDelimChar1,
69
                       int nDelimChar2, int *pnConsumedChars)
70
71
2.26k
{
72
2.26k
    int i = 0;  // Used after for.
73
30.6k
    for (; i < nMaxChars - 1 && pszRecord[i] != nDelimChar1 &&
74
30.6k
           pszRecord[i] != nDelimChar2;
75
28.4k
         i++)
76
28.4k
    {
77
28.4k
    }
78
79
2.26k
    *pnConsumedChars = i;
80
2.26k
    if (i < nMaxChars &&
81
2.26k
        (pszRecord[i] == nDelimChar1 || pszRecord[i] == nDelimChar2))
82
56
        (*pnConsumedChars)++;
83
84
2.26k
    char *pszReturn = static_cast<char *>(CPLMalloc(i + 1));
85
2.26k
    pszReturn[i] = '\0';
86
2.26k
    strncpy(pszReturn, pszRecord, i);
87
88
2.26k
    return pszReturn;
89
2.26k
}