Return error if node/link name is too long (#535)
* co-authored with @ehsan-shafiee * removes errant slashes * Throws correct error for ID name too long * Revert "Throws correct error for ID name too long" This reverts commit 57b4873f5882cb9fd983f7e1e5a703b9e442cd74. * fixes #534 by bubbling error codes up from add node/link internal functions * fixes tests on Mac at least * fixes improper success code * Error 252 (not 250) returned for ID name too long. From errors.dat: DAT(252,"invalid ID name")
This commit is contained in:
18
src/input2.c
18
src/input2.c
@@ -472,10 +472,13 @@ int addnodeID(Network *net, int n, char *id)
|
||||
**--------------------------------------------------------------
|
||||
*/
|
||||
{
|
||||
if (findnode(net,id)) return 0;
|
||||
if (findnode(net,id))
|
||||
return 215; // duplicate id
|
||||
if (strlen(id) > MAXID)
|
||||
return 252; // invalid format (too long)
|
||||
strncpy(net->Node[n].ID, id, MAXID);
|
||||
hashtable_insert(net->NodeHashTable, net->Node[n].ID, n);
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int addlinkID(Network *net, int n, char *id)
|
||||
@@ -488,10 +491,13 @@ int addlinkID(Network *net, int n, char *id)
|
||||
**--------------------------------------------------------------
|
||||
*/
|
||||
{
|
||||
if (findlink(net,id)) return 0;
|
||||
if (findlink(net,id))
|
||||
return 215; // duplicate id
|
||||
if (strlen(id) > MAXID)
|
||||
return 252; // invalid formt (too long);
|
||||
strncpy(net->Link[n].ID, id, MAXID);
|
||||
hashtable_insert(net->LinkHashTable, net->Link[n].ID, n);
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int addpattern(Network *network, char *id)
|
||||
@@ -512,7 +518,7 @@ int addpattern(Network *network, char *id)
|
||||
if (strcmp(id, network->Pattern[n].ID) == 0) return 0;
|
||||
if (findpattern(network, id) > 0) return 0;
|
||||
}
|
||||
if (strlen(id) > MAXID) return 250;
|
||||
if (strlen(id) > MAXID) return 252;
|
||||
|
||||
// Update pattern count & add a new pattern to the database
|
||||
n = n + 2;
|
||||
@@ -547,7 +553,7 @@ int addcurve(Network *network, char *id)
|
||||
if (strcmp(id, network->Curve[n].ID) == 0) return 0;
|
||||
if (findcurve(network, id) > 0) return 0;
|
||||
}
|
||||
if (strlen(id) > MAXID) return 250;
|
||||
if (strlen(id) > MAXID) return 252;
|
||||
|
||||
n = n + 2;
|
||||
network->Curve = (Scurve *)realloc(network->Curve, n * sizeof(Scurve));
|
||||
|
||||
55
src/input3.c
55
src/input3.c
@@ -79,6 +79,7 @@ int juncdata(Project *pr)
|
||||
double el, // elevation
|
||||
y = 0.0; // base demand
|
||||
Snode *node;
|
||||
int err = 0;
|
||||
|
||||
// Add new junction to data base
|
||||
n = parser->Ntokens;
|
||||
@@ -86,7 +87,8 @@ int juncdata(Project *pr)
|
||||
net->Njuncs++;
|
||||
net->Nnodes++;
|
||||
njuncs = net->Njuncs;
|
||||
if (!addnodeID(net, net->Njuncs, parser->Tok[0])) return setError(parser, 0, 215);
|
||||
err = addnodeID(net, net->Njuncs, parser->Tok[0]);
|
||||
if (err) return setError(parser, 0, err);
|
||||
|
||||
// Check for valid data
|
||||
if (n < 2) return 201;
|
||||
@@ -140,6 +142,7 @@ int tankdata(Project *pr)
|
||||
pattern = 0, // Time pattern index
|
||||
curve = 0, // Curve index
|
||||
overflow = FALSE;// Overflow indicator
|
||||
|
||||
double el = 0.0, // Elevation
|
||||
initlevel = 0.0, // Initial level
|
||||
minlevel = 0.0, // Minimum level
|
||||
@@ -150,6 +153,8 @@ int tankdata(Project *pr)
|
||||
Snode *node;
|
||||
Stank *tank;
|
||||
|
||||
int err = 0;
|
||||
|
||||
// Add new tank to data base
|
||||
n = parser->Ntokens;
|
||||
if (net->Ntanks == parser->MaxTanks ||
|
||||
@@ -158,7 +163,8 @@ int tankdata(Project *pr)
|
||||
net->Nnodes++;
|
||||
|
||||
i = parser->MaxJuncs + net->Ntanks;
|
||||
if (!addnodeID(net, i, parser->Tok[0])) return setError(parser, 0, 215);
|
||||
err = addnodeID(net, i, parser->Tok[0]);
|
||||
if (err) return setError(parser, 0, err);
|
||||
|
||||
// Check for valid data
|
||||
if (n < 2) return 201;
|
||||
@@ -273,13 +279,15 @@ int pipedata(Project *pr)
|
||||
LinkType type = PIPE; // Link type
|
||||
StatusType status = OPEN; // Link status
|
||||
Slink *link;
|
||||
int err = 0;
|
||||
|
||||
// Add new pipe to data base
|
||||
n = parser->Ntokens;
|
||||
if (net->Nlinks == parser->MaxLinks) return 200;
|
||||
net->Npipes++;
|
||||
net->Nlinks++;
|
||||
if (!addlinkID(net, net->Nlinks, parser->Tok[0])) return setError(parser, 0, 215);
|
||||
err = addlinkID(net, net->Nlinks, parser->Tok[0]);
|
||||
if (err) return setError(parser, 0, err);
|
||||
|
||||
// Check for valid data
|
||||
if (n < 6) return 201;
|
||||
@@ -360,6 +368,7 @@ int pumpdata(Project *pr)
|
||||
double y;
|
||||
Slink *link;
|
||||
Spump *pump;
|
||||
int err = 0;
|
||||
|
||||
/* Add new pump to data base */
|
||||
n = parser->Ntokens;
|
||||
@@ -367,7 +376,8 @@ int pumpdata(Project *pr)
|
||||
net->Npumps == parser->MaxPumps) return 200;
|
||||
net->Nlinks++;
|
||||
net->Npumps++;
|
||||
if (!addlinkID(net, net->Nlinks, parser->Tok[0])) return setError(parser, 0, 215);
|
||||
err = addlinkID(net, net->Nlinks, parser->Tok[0]);
|
||||
if (err) return setError(parser, 0, err);
|
||||
|
||||
// Check for valid data
|
||||
if (n < 3) return 201;
|
||||
@@ -474,6 +484,7 @@ int valvedata(Project *pr)
|
||||
setting, // Valve setting
|
||||
lcoeff = 0.0; // Minor loss coeff.
|
||||
Slink *link;
|
||||
int err = 0;
|
||||
|
||||
// Add new valve to data base
|
||||
n = parser->Ntokens;
|
||||
@@ -481,21 +492,33 @@ int valvedata(Project *pr)
|
||||
net->Nvalves == parser->MaxValves) return 200;
|
||||
net->Nvalves++;
|
||||
net->Nlinks++;
|
||||
if (!addlinkID(net, net->Nlinks, parser->Tok[0])) return setError(parser, 0, 215);
|
||||
err = addlinkID(net, net->Nlinks, parser->Tok[0]);
|
||||
if (err) return setError(parser, 0, err);
|
||||
|
||||
// Check for valid data
|
||||
if (n < 6) return 201;
|
||||
if ((j1 = findnode(net, parser->Tok[1])) == 0) return setError(parser, 1, 203);
|
||||
if ((j2 = findnode(net, parser->Tok[2])) == 0) return setError(parser, 2, 203);
|
||||
if (j1 == j2) return setError(parser, 0, 222);
|
||||
if (n < 6)
|
||||
return 201;
|
||||
if ((j1 = findnode(net, parser->Tok[1])) == 0)
|
||||
return setError(parser, 1, 203);
|
||||
if ((j2 = findnode(net, parser->Tok[2])) == 0)
|
||||
return setError(parser, 2, 203);
|
||||
if (j1 == j2)
|
||||
return setError(parser, 0, 222);
|
||||
|
||||
if (match(parser->Tok[4], w_PRV)) type = PRV;
|
||||
else if (match(parser->Tok[4], w_PSV)) type = PSV;
|
||||
else if (match(parser->Tok[4], w_PBV)) type = PBV;
|
||||
else if (match(parser->Tok[4], w_FCV)) type = FCV;
|
||||
else if (match(parser->Tok[4], w_TCV)) type = TCV;
|
||||
else if (match(parser->Tok[4], w_GPV)) type = GPV;
|
||||
else return setError(parser, 4, 213);
|
||||
if (match(parser->Tok[4], w_PRV))
|
||||
type = PRV;
|
||||
else if (match(parser->Tok[4], w_PSV))
|
||||
type = PSV;
|
||||
else if (match(parser->Tok[4], w_PBV))
|
||||
type = PBV;
|
||||
else if (match(parser->Tok[4], w_FCV))
|
||||
type = FCV;
|
||||
else if (match(parser->Tok[4], w_TCV))
|
||||
type = TCV;
|
||||
else if (match(parser->Tok[4], w_GPV))
|
||||
type = GPV;
|
||||
else
|
||||
return setError(parser, 4, 213);
|
||||
|
||||
if (!getfloat(parser->Tok[3], &diam)) return setError(parser, 3, 202);
|
||||
if (diam <= 0.0) return setError(parser, 3, 211);
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
|
||||
|
||||
if(UNIX)
|
||||
set(CMAKE_CXX_FLAGS "-std=c++11")
|
||||
endif(UNIX)
|
||||
|
||||
# Sets for output directory for executables and libraries
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
|
||||
|
||||
if(UNIX)
|
||||
set(CMAKE_CXX_FLAGS "-std=c++11")
|
||||
endif(UNIX)
|
||||
|
||||
# Sets for output directory for executables and libraries
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||
@@ -24,4 +26,3 @@ add_executable(test_filemanager ./test_filemanager.cpp
|
||||
../../src/util/cstr_helper.c)
|
||||
target_include_directories(test_filemanager PUBLIC ../../src/)
|
||||
target_link_libraries(test_filemanager ${Boost_LIBRARIES})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user