-
Notifications
You must be signed in to change notification settings - Fork 327
/
disrull.c
109 lines (101 loc) · 3.26 KB
/
disrull.c
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
/*
* Copyright (C) 1994-2018 Altair Engineering, Inc.
* For more information, contact Altair at www.altair.com.
*
* This file is part of the PBS Professional ("PBS Pro") software.
*
* Open Source License Information:
*
* PBS Pro is free software. You can redistribute it and/or modify it under the
* terms of the GNU Affero General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option) any
* later version.
*
* PBS Pro is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE.
* See the GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Commercial License Information:
*
* For a copy of the commercial license terms and conditions,
* go to: (http://www.pbspro.com/UserArea/agreement.html)
* or contact the Altair Legal Department.
*
* Altair’s dual-license business model allows companies, individuals, and
* organizations to create proprietary derivative works of PBS Pro and
* distribute them - whether embedded or bundled with other software -
* under a commercial license agreement.
*
* Use of Altair’s trademarks, including but not limited to "PBS™",
* "PBS Professional®", and "PBS Pro™" and Altair’s logos is subject to Altair's
* trademark licensing policies.
*
*/
/**
* @file disrull.c
*
* @par Synopsis:
* u_Long disrull(int stream, int *retval)
*
* Gets a Data-is-Strings unsigned integer from <stream>, converts it into
* an u_Long, and returns it.
*
* This format for character strings representing unsigned integers can
* best be understood through the decoding algorithm:
*
* 1. Initialize the digit count to 1.
*
* 2. Read the next character; if it is a plus sign, go to step (4); if it
* is a minus sign, post an error.
*
* 3. Decode a new count from the digit decoded in step (2) and the next
* count - 1 digits; repeat step (2).
*
* 4. Decode the next count digits as the unsigned integer.
*
* *<retval> gets DIS_SUCCESS if everything works well. It gets an error
* code otherwise. In case of an error, the <stream> character pointer is
* reset, making it possible to retry with some other conversion strategy.
*/
#include <pbs_config.h> /* the master config generated by configure */
#include <assert.h>
#include <stddef.h>
#include "dis.h"
#include "dis_.h"
/**
* @brief
* Function to read a string which comes over network from
* mom to server and convert that string data to numeric form of type
* u_Long
*
* @param[in] stream - pointer to data stream
* @param[out] retval - return value
*
* @return u_Long
* @retval converted value success
* @retval 0 error
*
*/
u_Long
disrull(int stream, int *retval)
{
int locret;
int negate;
u_Long value;
assert(disr_commit != NULL);
assert(retval != NULL);
locret = disrsll_(stream, &negate, &value, 1, 0);
if (locret != DIS_SUCCESS) {
value = 0;
} else if (negate) {
value = 0;
locret = DIS_BADSIGN;
}
*retval = ((*disr_commit)(stream, locret == DIS_SUCCESS) < 0) ?
DIS_NOCOMMIT : locret;
return (value);
}