@@ -1344,10 +1344,13 @@ bool TYPVAL<PSZ>::SetValue_pval(PVAL valp, bool chktype)
1344
1344
/* **********************************************************************/
1345
1345
bool TYPVAL<PSZ>::SetValue_char(char *p, int n)
1346
1346
{
1347
- bool rc;
1347
+ bool rc = false ;
1348
1348
1349
- if (p && n > 0 ) {
1350
- rc = n > Len;
1349
+ if (!p || n == 0 ) {
1350
+ Reset ();
1351
+ Null = Nullable;
1352
+ } else if (p != Strp) {
1353
+ rc = n > Len;
1351
1354
1352
1355
if ((n = MY_MIN (n, Len))) {
1353
1356
strncpy (Strp, p, n);
@@ -1366,10 +1369,6 @@ bool TYPVAL<PSZ>::SetValue_char(char *p, int n)
1366
1369
Reset ();
1367
1370
1368
1371
Null = false ;
1369
- } else {
1370
- rc = false ;
1371
- Reset ();
1372
- Null = Nullable;
1373
1372
} // endif p
1374
1373
1375
1374
return rc;
@@ -1380,12 +1379,12 @@ bool TYPVAL<PSZ>::SetValue_char(char *p, int n)
1380
1379
/* **********************************************************************/
1381
1380
void TYPVAL<PSZ>::SetValue_psz(PSZ s)
1382
1381
{
1383
- if (s) {
1384
- strncpy (Strp, s, Len);
1382
+ if (!s) {
1383
+ Reset ();
1384
+ Null = Nullable;
1385
+ } else if (s != Strp) {
1386
+ strncpy (Strp, s, Len);
1385
1387
Null = false ;
1386
- } else {
1387
- Reset ();
1388
- Null = Nullable;
1389
1388
} // endif s
1390
1389
1391
1390
} // end of SetValue_psz
@@ -1643,19 +1642,19 @@ bool TYPVAL<PSZ>::Compute(PGLOBAL g, PVAL *vp, int np, OPVAL op)
1643
1642
assert (np == 1 || np == 2 );
1644
1643
1645
1644
if (np == 2 )
1646
- strncpy (Strp, p[0 ], Len );
1645
+ SetValue_psz ( p[0 ]);
1647
1646
1648
1647
if ((i = Len - (signed )strlen (Strp)) > 0 )
1649
1648
strncat (Strp, p[np - 1 ], i);
1650
1649
1651
1650
break ;
1652
1651
case OP_MIN:
1653
1652
assert (np == 2 );
1654
- strcpy (Strp, (strcmp (p[0 ], p[1 ]) < 0 ) ? p[0 ] : p[1 ]);
1653
+ SetValue_psz ( (strcmp (p[0 ], p[1 ]) < 0 ) ? p[0 ] : p[1 ]);
1655
1654
break ;
1656
1655
case OP_MAX:
1657
1656
assert (np == 2 );
1658
- strcpy (Strp, (strcmp (p[0 ], p[1 ]) > 0 ) ? p[0 ] : p[1 ]);
1657
+ SetValue_psz ( (strcmp (p[0 ], p[1 ]) > 0 ) ? p[0 ] : p[1 ]);
1659
1658
break ;
1660
1659
default :
1661
1660
// sprintf(g->Message, MSG(BAD_EXP_OPER), op);
0 commit comments