errrrrrm
authorhgn <hgodden00@gmail.com>
Thu, 19 Jun 2025 00:03:12 +0000 (01:03 +0100)
committerhgn <hgodden00@gmail.com>
Thu, 19 Jun 2025 00:03:12 +0000 (01:03 +0100)
vg_console.c
vg_string.c
vg_string.h

index 2e803b16490af7848fc3cc9229779815303a7e3e..cd744df2eab7711202600136b4b46c3bd3de74cc 100644 (file)
@@ -116,39 +116,62 @@ static void _vg_console_free(void)
  */
 static int vg_console_tokenize( const char *src, char *dst, const char *args[32] )
 {
-       int arg_count = 0,
-       in_token = 0;
+       int arg_count = 0;
+   bool in_token = 0, in_string = 0;
        
        for( int i=0;; i ++ )
    {
-               if( src[i] )
+      char c = src[i];
+      dst[i] = c;
+
+      if( c == '\0' )
+         break;
+
+      if( c == '"' )
       {
-                       if( src[i] == ' ' || src[i] == '\t' )
+         if( in_string )
          {
             if( in_token )
+            {
                dst[i] = '\0';
+               in_token = 0;
+            }
 
-                               in_token = 0;
-                               
-                               if( arg_count == 32 )
-                                       break;
-                       }
-                       else
+            in_string = 0;
+         }
+         else
+            in_string = 1;
+      }
+      else 
+      {
+         if( !in_string && (c == ' ' || c == '\t') )
          {
-                               dst[i] = src[i];
-                               
-                               if( !in_token )
+            if( in_token )
             {
-                                       args[ arg_count ++ ] = &dst[i];
-                                       in_token = 1;
-                               }
-                       }
-               }
-               else
-      {
-                       dst[i] = '\0';
-                       break;
-               }
+               dst[i] = '\0';
+               in_token = 0;
+            }
+            else
+               dst[i] = '\0';
+         }
+         else
+         {
+            if( in_token ) {}
+            else
+            {
+               if( arg_count == 32 )
+               {
+                  vg_error( "Console input exceeded maximum command tokens (>32)\n" );
+                  break;
+               }
+               else
+               {
+                  args[ arg_count ++ ] = &dst[i];
+                  in_token = 1;
+               }
+            }
+         }
+      }
        }
 
    return arg_count;
index 2c0d24ea6c59b134c189b53642530e097f94b8e1..8fec7c499b7da7854fd536062c3c883a75812e63 100644 (file)
@@ -123,7 +123,8 @@ void vg_strcatch( vg_str *str, char c )
 /* 
  * FIXME: Negative numbers
  */
-void vg_strcati32( vg_str *str, i32 value )
+void vg_strcati32( vg_str *str, i32 value ){ vg_strcatu64( str, (u64)value ); }
+void vg_strcatu64( vg_str *str, u64 value )
 {
    if( value )
    {
@@ -139,7 +140,6 @@ void vg_strcati32( vg_str *str, i32 value )
       for( int j=0; j<i; j ++ )
          reverse[j] = temp[ i-1-j ];
       reverse[i] = '\0';
-
       vg_strcat( str, reverse );
    }
    else
index 767f40d127e2146abbd1dd305db2a3ebe60e4284..145cc797c5f0eec1c071891ee38686469b774a0f 100644 (file)
@@ -40,6 +40,7 @@ void vg_strcatf( vg_str *str, const char *fmt, ... );
  * Append character to vg_str 
  */
 void vg_strcatch( vg_str *str, char c );
+void vg_strcatu64( vg_str *str, u64 value );
 void vg_strcati32( vg_str *str, i32 value );
 void vg_strcati32r( vg_str *str, i32 value, i32 n, char alt );
 /*