@@ -933,6 +933,10 @@ void cmd_str1(long funcCode, var_t *arg, var_t *r) {
933933 // str <- CBS$(str)
934934 // convert C-Style string to BASIC-style string
935935 //
936+ if (!v_is_type (arg , V_STR )) {
937+ v_init (r );
938+ break ;
939+ }
936940 r -> v .p .ptr = cstrdup (arg -> v .p .ptr );
937941 r -> v .p .length = strlen (r -> v .p .ptr ) + 1 ;
938942 break ;
@@ -941,6 +945,10 @@ void cmd_str1(long funcCode, var_t *arg, var_t *r) {
941945 // str <- BCS$(str)
942946 // convert BASIC-Style string to C-style string
943947 //
948+ if (!v_is_type (arg , V_STR )) {
949+ v_init (r );
950+ break ;
951+ }
944952 r -> v .p .ptr = bstrdup (arg -> v .p .ptr );
945953 r -> v .p .length = strlen (r -> v .p .ptr ) + 1 ;
946954 break ;
@@ -983,32 +991,34 @@ void cmd_str1(long funcCode, var_t *arg, var_t *r) {
983991 //
984992 // str <- LCASE$(s)
985993 //
986- r -> v .p .ptr = ( char * ) malloc ( strlen ( arg -> v . p . ptr ) + 1 );
987- strcpy ( r -> v .p .ptr , arg -> v .p .ptr );
994+ r -> v .p .ptr = v_str ( arg );
995+ r -> v .p .length = strlen ( r -> v .p .ptr ) + 1 ;
988996 p = r -> v .p .ptr ;
989997 while (* p ) {
990998 * p = to_lower (* p );
991999 p ++ ;
9921000 }
993- r -> v .p .length = arg -> v .p .length ;
9941001 break ;
9951002 case kwUCASE :
9961003 //
9971004 // str <- UCASE$(s)
9981005 //
999- r -> v .p .ptr = ( char * ) malloc ( strlen ( arg -> v . p . ptr ) + 1 );
1000- strcpy ( r -> v .p .ptr , arg -> v .p .ptr );
1006+ r -> v .p .ptr = v_str ( arg );
1007+ r -> v .p .length = strlen ( r -> v .p .ptr ) + 1 ;
10011008 p = r -> v .p .ptr ;
10021009 while (* p ) {
10031010 * p = to_upper (* p );
10041011 p ++ ;
10051012 }
1006- r -> v .p .length = arg -> v .p .length ;
10071013 break ;
10081014 case kwLTRIM :
10091015 //
10101016 // str <- LTRIM$(s)
10111017 //
1018+ if (!v_is_type (arg , V_STR )) {
1019+ v_init (r );
1020+ break ;
1021+ }
10121022 p = arg -> v .p .ptr ;
10131023 while (is_wspace (* p )) {
10141024 p ++ ;
@@ -1025,6 +1035,10 @@ void cmd_str1(long funcCode, var_t *arg, var_t *r) {
10251035 //
10261036 // str <- RTRIM$(s)
10271037 //
1038+ if (!v_is_type (arg , V_STR )) {
1039+ v_init (r );
1040+ break ;
1041+ }
10281042 p = arg -> v .p .ptr ;
10291043 if (* p != '\0' ) {
10301044 while (* p ) {
@@ -1131,7 +1145,7 @@ void cmd_str1(long funcCode, var_t *arg, var_t *r) {
11311145 //
11321146 // str <- ENVIRON$(str)
11331147 //
1134- if (* arg -> v .p .ptr != '\0' ) {
1148+ if (v_is_type ( arg , V_STR ) && * arg -> v .p .ptr != '\0' ) {
11351149 // return the variable
11361150 const char * v = dev_getenv (arg -> v .p .ptr );
11371151 if (v ) {
0 commit comments