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);
|
strncpy(net->Node[n].ID, id, MAXID);
|
||||||
hashtable_insert(net->NodeHashTable, net->Node[n].ID, n);
|
hashtable_insert(net->NodeHashTable, net->Node[n].ID, n);
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int addlinkID(Network *net, int n, char *id)
|
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);
|
strncpy(net->Link[n].ID, id, MAXID);
|
||||||
hashtable_insert(net->LinkHashTable, net->Link[n].ID, n);
|
hashtable_insert(net->LinkHashTable, net->Link[n].ID, n);
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int addpattern(Network *network, char *id)
|
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 (strcmp(id, network->Pattern[n].ID) == 0) return 0;
|
||||||
if (findpattern(network, 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
|
// Update pattern count & add a new pattern to the database
|
||||||
n = n + 2;
|
n = n + 2;
|
||||||
@@ -547,7 +553,7 @@ int addcurve(Network *network, char *id)
|
|||||||
if (strcmp(id, network->Curve[n].ID) == 0) return 0;
|
if (strcmp(id, network->Curve[n].ID) == 0) return 0;
|
||||||
if (findcurve(network, 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;
|
n = n + 2;
|
||||||
network->Curve = (Scurve *)realloc(network->Curve, n * sizeof(Scurve));
|
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
|
double el, // elevation
|
||||||
y = 0.0; // base demand
|
y = 0.0; // base demand
|
||||||
Snode *node;
|
Snode *node;
|
||||||
|
int err = 0;
|
||||||
|
|
||||||
// Add new junction to data base
|
// Add new junction to data base
|
||||||
n = parser->Ntokens;
|
n = parser->Ntokens;
|
||||||
@@ -86,7 +87,8 @@ int juncdata(Project *pr)
|
|||||||
net->Njuncs++;
|
net->Njuncs++;
|
||||||
net->Nnodes++;
|
net->Nnodes++;
|
||||||
njuncs = net->Njuncs;
|
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
|
// Check for valid data
|
||||||
if (n < 2) return 201;
|
if (n < 2) return 201;
|
||||||
@@ -140,6 +142,7 @@ int tankdata(Project *pr)
|
|||||||
pattern = 0, // Time pattern index
|
pattern = 0, // Time pattern index
|
||||||
curve = 0, // Curve index
|
curve = 0, // Curve index
|
||||||
overflow = FALSE;// Overflow indicator
|
overflow = FALSE;// Overflow indicator
|
||||||
|
|
||||||
double el = 0.0, // Elevation
|
double el = 0.0, // Elevation
|
||||||
initlevel = 0.0, // Initial level
|
initlevel = 0.0, // Initial level
|
||||||
minlevel = 0.0, // Minimum level
|
minlevel = 0.0, // Minimum level
|
||||||
@@ -150,6 +153,8 @@ int tankdata(Project *pr)
|
|||||||
Snode *node;
|
Snode *node;
|
||||||
Stank *tank;
|
Stank *tank;
|
||||||
|
|
||||||
|
int err = 0;
|
||||||
|
|
||||||
// Add new tank to data base
|
// Add new tank to data base
|
||||||
n = parser->Ntokens;
|
n = parser->Ntokens;
|
||||||
if (net->Ntanks == parser->MaxTanks ||
|
if (net->Ntanks == parser->MaxTanks ||
|
||||||
@@ -158,7 +163,8 @@ int tankdata(Project *pr)
|
|||||||
net->Nnodes++;
|
net->Nnodes++;
|
||||||
|
|
||||||
i = parser->MaxJuncs + net->Ntanks;
|
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
|
// Check for valid data
|
||||||
if (n < 2) return 201;
|
if (n < 2) return 201;
|
||||||
@@ -273,13 +279,15 @@ int pipedata(Project *pr)
|
|||||||
LinkType type = PIPE; // Link type
|
LinkType type = PIPE; // Link type
|
||||||
StatusType status = OPEN; // Link status
|
StatusType status = OPEN; // Link status
|
||||||
Slink *link;
|
Slink *link;
|
||||||
|
int err = 0;
|
||||||
|
|
||||||
// Add new pipe to data base
|
// Add new pipe to data base
|
||||||
n = parser->Ntokens;
|
n = parser->Ntokens;
|
||||||
if (net->Nlinks == parser->MaxLinks) return 200;
|
if (net->Nlinks == parser->MaxLinks) return 200;
|
||||||
net->Npipes++;
|
net->Npipes++;
|
||||||
net->Nlinks++;
|
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
|
// Check for valid data
|
||||||
if (n < 6) return 201;
|
if (n < 6) return 201;
|
||||||
@@ -360,6 +368,7 @@ int pumpdata(Project *pr)
|
|||||||
double y;
|
double y;
|
||||||
Slink *link;
|
Slink *link;
|
||||||
Spump *pump;
|
Spump *pump;
|
||||||
|
int err = 0;
|
||||||
|
|
||||||
/* Add new pump to data base */
|
/* Add new pump to data base */
|
||||||
n = parser->Ntokens;
|
n = parser->Ntokens;
|
||||||
@@ -367,7 +376,8 @@ int pumpdata(Project *pr)
|
|||||||
net->Npumps == parser->MaxPumps) return 200;
|
net->Npumps == parser->MaxPumps) return 200;
|
||||||
net->Nlinks++;
|
net->Nlinks++;
|
||||||
net->Npumps++;
|
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
|
// Check for valid data
|
||||||
if (n < 3) return 201;
|
if (n < 3) return 201;
|
||||||
@@ -474,6 +484,7 @@ int valvedata(Project *pr)
|
|||||||
setting, // Valve setting
|
setting, // Valve setting
|
||||||
lcoeff = 0.0; // Minor loss coeff.
|
lcoeff = 0.0; // Minor loss coeff.
|
||||||
Slink *link;
|
Slink *link;
|
||||||
|
int err = 0;
|
||||||
|
|
||||||
// Add new valve to data base
|
// Add new valve to data base
|
||||||
n = parser->Ntokens;
|
n = parser->Ntokens;
|
||||||
@@ -481,21 +492,33 @@ int valvedata(Project *pr)
|
|||||||
net->Nvalves == parser->MaxValves) return 200;
|
net->Nvalves == parser->MaxValves) return 200;
|
||||||
net->Nvalves++;
|
net->Nvalves++;
|
||||||
net->Nlinks++;
|
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
|
// Check for valid data
|
||||||
if (n < 6) return 201;
|
if (n < 6)
|
||||||
if ((j1 = findnode(net, parser->Tok[1])) == 0) return setError(parser, 1, 203);
|
return 201;
|
||||||
if ((j2 = findnode(net, parser->Tok[2])) == 0) return setError(parser, 2, 203);
|
if ((j1 = findnode(net, parser->Tok[1])) == 0)
|
||||||
if (j1 == j2) return setError(parser, 0, 222);
|
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;
|
if (match(parser->Tok[4], w_PRV))
|
||||||
else if (match(parser->Tok[4], w_PSV)) type = PSV;
|
type = PRV;
|
||||||
else if (match(parser->Tok[4], w_PBV)) type = PBV;
|
else if (match(parser->Tok[4], w_PSV))
|
||||||
else if (match(parser->Tok[4], w_FCV)) type = FCV;
|
type = PSV;
|
||||||
else if (match(parser->Tok[4], w_TCV)) type = TCV;
|
else if (match(parser->Tok[4], w_PBV))
|
||||||
else if (match(parser->Tok[4], w_GPV)) type = GPV;
|
type = PBV;
|
||||||
else return setError(parser, 4, 213);
|
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 (!getfloat(parser->Tok[3], &diam)) return setError(parser, 3, 202);
|
||||||
if (diam <= 0.0) return setError(parser, 3, 211);
|
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
|
# Sets for output directory for executables and libraries
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
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
|
# Sets for output directory for executables and libraries
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
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)
|
../../src/util/cstr_helper.c)
|
||||||
target_include_directories(test_filemanager PUBLIC ../../src/)
|
target_include_directories(test_filemanager PUBLIC ../../src/)
|
||||||
target_link_libraries(test_filemanager ${Boost_LIBRARIES})
|
target_link_libraries(test_filemanager ${Boost_LIBRARIES})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user