@@ -933,8 +933,6 @@ 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- v_tostr (arg );
937- IF_ERR_RETURN ;
938936 r -> v .p .ptr = cstrdup (arg -> v .p .ptr );
939937 r -> v .p .length = strlen (r -> v .p .ptr ) + 1 ;
940938 break ;
@@ -943,9 +941,6 @@ void cmd_str1(long funcCode, var_t *arg, var_t *r) {
943941 // str <- BCS$(str)
944942 // convert BASIC-Style string to C-style string
945943 //
946- v_tostr (arg );
947- IF_ERR_RETURN ;
948-
949944 r -> v .p .ptr = bstrdup (arg -> v .p .ptr );
950945 r -> v .p .length = strlen (r -> v .p .ptr ) + 1 ;
951946 break ;
@@ -988,8 +983,6 @@ void cmd_str1(long funcCode, var_t *arg, var_t *r) {
988983 //
989984 // str <- LCASE$(s)
990985 //
991- v_tostr (arg );
992- IF_ERR_RETURN ;
993986 r -> v .p .ptr = (char * )malloc (strlen (arg -> v .p .ptr ) + 1 );
994987 strcpy (r -> v .p .ptr , arg -> v .p .ptr );
995988 p = r -> v .p .ptr ;
@@ -1003,8 +996,6 @@ void cmd_str1(long funcCode, var_t *arg, var_t *r) {
1003996 //
1004997 // str <- UCASE$(s)
1005998 //
1006- v_tostr (arg );
1007- IF_ERR_RETURN ;
1008999 r -> v .p .ptr = (char * )malloc (strlen (arg -> v .p .ptr ) + 1 );
10091000 strcpy (r -> v .p .ptr , arg -> v .p .ptr );
10101001 p = r -> v .p .ptr ;
@@ -1018,8 +1009,6 @@ void cmd_str1(long funcCode, var_t *arg, var_t *r) {
10181009 //
10191010 // str <- LTRIM$(s)
10201011 //
1021- v_tostr (arg );
1022- IF_ERR_RETURN ;
10231012 p = arg -> v .p .ptr ;
10241013 while (is_wspace (* p )) {
10251014 p ++ ;
@@ -1036,8 +1025,6 @@ void cmd_str1(long funcCode, var_t *arg, var_t *r) {
10361025 //
10371026 // str <- RTRIM$(s)
10381027 //
1039- v_tostr (arg );
1040- IF_ERR_RETURN ;
10411028 p = arg -> v .p .ptr ;
10421029 if (* p != '\0' ) {
10431030 while (* p ) {
@@ -1144,8 +1131,6 @@ void cmd_str1(long funcCode, var_t *arg, var_t *r) {
11441131 //
11451132 // str <- ENVIRON$(str)
11461133 //
1147- v_tostr (arg );
1148- IF_ERR_RETURN ;
11491134 if (* arg -> v .p .ptr != '\0' ) {
11501135 // return the variable
11511136 const char * v = dev_getenv (arg -> v .p .ptr );
@@ -1293,6 +1278,7 @@ void cmd_str0(long funcCode, var_t *r) {
12931278 tms = * localtime (& now );
12941279 r -> type = V_STR ;
12951280 r -> v .p .ptr = malloc (32 );
1281+ r -> v .p .owner = 1 ;
12961282 sprintf (r -> v .p .ptr , "%02d/%02d/%04d" , tms .tm_mday , tms .tm_mon + 1 , tms .tm_year + 1900 );
12971283 r -> v .p .length = strlen (r -> v .p .ptr ) + 1 ;
12981284 break ;
@@ -1304,6 +1290,7 @@ void cmd_str0(long funcCode, var_t *r) {
13041290 tms = * localtime (& now );
13051291 r -> type = V_STR ;
13061292 r -> v .p .ptr = malloc (32 );
1293+ r -> v .p .owner = 1 ;
13071294 sprintf (r -> v .p .ptr , "%02d:%02d:%02d" , tms .tm_hour , tms .tm_min , tms .tm_sec );
13081295 r -> v .p .length = strlen (r -> v .p .ptr ) + 1 ;
13091296 break ;
@@ -2216,9 +2203,7 @@ void cmd_genfunc(long funcCode, var_t *r) {
22162203
22172204 if (funcCode == kwDATEFMT ) {
22182205 // format
2219- r -> type = V_STR ;
2220- r -> v .p .ptr = date_fmt (arg .v .p .ptr , d , m , y );
2221- r -> v .p .length = strlen (r -> v .p .ptr ) + 1 ;
2206+ v_move_str (r , date_fmt (arg .v .p .ptr , d , m , y ));
22222207 v_free (& arg );
22232208 } else {
22242209 // weekday
@@ -2247,6 +2232,7 @@ void cmd_genfunc(long funcCode, var_t *r) {
22472232 r -> type = V_STR ;
22482233 r -> v .p .ptr = malloc ((count << 1 ) + 1 );
22492234 r -> v .p .ptr [0 ] = '\0' ;
2235+ r -> v .p .owner = 1 ;
22502236 len = 0 ;
22512237 char tmp [3 ];
22522238 for (int i = 0 ; i < count ; i ++ ) {
@@ -2279,9 +2265,7 @@ void cmd_genfunc(long funcCode, var_t *r) {
22792265 r -> v .p .ptr [len ] = '\0' ;
22802266 } else {
22812267 // file
2282- r -> type = V_STR ;
2283- r -> v .p .ptr = malloc (count + 1 );
2284- r -> v .p .length = count + 1 ;
2268+ v_init_str (r , count );
22852269 dev_fread (handle , (byte * )r -> v .p .ptr , count );
22862270 r -> v .p .ptr [count ] = '\0' ;
22872271 }
@@ -2837,9 +2821,7 @@ void cmd_genfunc(long funcCode, var_t *r) {
28372821 // add the entries
28382822 for (int i = 0 ; i < count ; i ++ ) {
28392823 var_t * elem_p = v_elem (r , i );
2840- elem_p -> type = V_STR ;
2841- elem_p -> v .p .length = strlen (list [i ]) + 1 ;
2842- elem_p -> v .p .ptr = malloc (elem_p -> v .p .length );
2824+ v_init_str (elem_p , strlen (list [i ]));
28432825 strcpy (elem_p -> v .p .ptr , list [i ]);
28442826 }
28452827 } else {
0 commit comments