/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 | } |