File: dataspec.c.html

package info (click to toggle)
open-plc-utils 0.0.6%2Bgit20230504.1ba7d5a0-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 17,212 kB
  • sloc: ansic: 60,875; xml: 16,179; sh: 1,216; makefile: 698
file content (136 lines) | stat: -rw-r--r-- 3,327 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<?xml version='1.0' encoding='iso-8859-1'?>
<!doctype html public '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
<html xmlns='http://www.w3c.org/1999/xhtml' lang='en-us'>
	<head>
		<title>
			dataspec.c
			</title>
		<meta http-equiv='content-type' content='text/html;iso-8859-1'/>
		<meta name='generator' content='motley-tools 1.9.4 13:40:33 Feb 18 2015'/>
		<meta name='author' content='cmaier@cmassoc.net'/>
		<meta name='robots' content='noindex,nofollow'/>
		<link href='toolkit.css' rel='stylesheet' type='text/css'/>
		</head>
	<body>
		<div class='headerlink'>
			[<a href='coqos_rel.c.html' title=' coqos_rel.c '>PREV</a>]
			[<a href='toolkit.html' title=' Index '>HOME</a>]
			[<a href='debug.c.html' title=' debug.c '>NEXT</a>]
			</div>
<pre>
/*====================================================================*
 *
 *   size_t dataspec (char const * string,  void * memory, size_t extent);
 *
 *   memory.h
 *
 *   encode a memory region with a variable-length hexadecimal string;
 *   return the number of bytes encoded or terminate the program on
 *   error;
 *
 *   the number of octets in string must equal the memory extent or
 *   an error will occur; octets may be seperated by semi-colons;
 *   empty octets are illegal;
 *
 *   Motley Tools by Charles Maier &lt;cmaier@cmassoc.net&gt;;
 *   Copyright (c) 2001-2006 by Charles Maier Associates;
 *   Licensed under the Internet Software Consortium License;
 *
 *--------------------------------------------------------------------*/

#ifndef DATASPEC_SOURCE
#define DATASPEC_SOURCE

#include &lt;ctype.h&gt;
#include &lt;errno.h&gt;

#include &quot;../tools/memory.h&quot;
#include &quot;../tools/number.h&quot;
#include &quot;../tools/error.h&quot;

size_t dataspec (char const * string, void * memory, size_t extent)

{
	char const * number = string;
	byte * origin = (byte *)(memory);
	byte * offset = (byte *)(memory);
	if (!number)
	{
		error (1, EFAULT, &quot;dataspec&quot;);
	}

#ifdef WIN32

	while (isspace (*number))
	{
		number++;
	}

#endif

	while ((*number) &amp;&amp; (extent))
	{
		unsigned digit = 0;

#ifdef WIN32

		if (isspace (*number))
		{
			break;
		}

#endif

		if ((offset &gt; origin) &amp;&amp; (*number == HEX_EXTENDER))
		{
			number++;
		}
		if ((digit = todigit (*number++)) &gt;= RADIX_HEX)
		{
			error (1, EINVAL, &quot;You said '%s' but I want a hex digit&quot;, string);
		}
		*offset = digit &lt;&lt; 4;
		if (!*number)
		{
			error (1, EINVAL, &quot;You said '%s' but I want another hex digit&quot;, string);
		}
		if ((digit = todigit (*number++)) &gt;= 0x10)
		{
			error (1, EINVAL, &quot;You said '%s' but I want valid hex data&quot;, string);
		}
		*offset |= digit;
		offset++;
		extent--;
	}

#ifdef WIN32

	while (isspace (*number))
	{
		number++;
	}

#endif

	if (*number &amp;&amp; !extent)
	{
		error (1, EINVAL, &quot;'%s' exceeds %d bytes&quot;, string, (unsigned)(offset - origin - extent));
	}
	if (*number)
	{
		error (1, EINVAL, &quot;String '%s' contains trash&quot;, string);
	}
	return (offset - origin);
}

#endif


</pre>
		<div class='footerlink'>
			[<a href='coqos_rel.c.html' title=' coqos_rel.c '>PREV</a>]
			[<a href='toolkit.html' title=' Index '>HOME</a>]
			[<a href='debug.c.html' title=' debug.c '>NEXT</a>]
			</div>
		</body>
	</html>