Fix adding to string that was allocated earlier
This commit is contained in:
		
							parent
							
								
									0d3abe8e42
								
							
						
					
					
						commit
						d96fc51b9c
					
				| @ -1,13 +1,13 @@ | |||||||
| // Arithmetic, function calls and imports! | // Arithmetic, function calls and imports! | ||||||
| 
 | 
 | ||||||
| import std::print; | import std::print; | ||||||
| import std::new_string; | import std::from_str; | ||||||
| import std::add_num_to_str; | import std::add_num_to_str; | ||||||
| import std::free_string; | import std::free_string; | ||||||
| 
 | 
 | ||||||
| fn main() -> u32 { | fn main() -> u32 { | ||||||
|   for i in 0 .. 15 { |   for i in 0 .. 15 { | ||||||
|     let mut text = new_string(); |     let mut text = from_str("num: "); | ||||||
|     add_num_to_str(&mut text, i); |     add_num_to_str(&mut text, i); | ||||||
|     print(&text); |     print(&text); | ||||||
|     free_string(&mut text); |     free_string(&mut text); | ||||||
|  | |||||||
| @ -38,12 +38,12 @@ pub fn new_string() -> String { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub fn from_str(str: *char) -> String { | pub fn from_str(str: *char) -> String { | ||||||
|     let length = str_length(str, 0); |     let length = str_length(str); | ||||||
|     let cloned = malloc(length as u64) as *char; |     let cloned = malloc(length as u64) as *char; | ||||||
|     copy_bits(str, cloned, 0, length as u64); |     copy_bits(str, cloned, length as u64); | ||||||
|     return String { |     return String { | ||||||
|         inner: cloned, |         inner: cloned, | ||||||
|         length: length, |         length: length -1, | ||||||
|         max_length: length, |         max_length: length, | ||||||
|         must_be_freed: false, |         must_be_freed: false, | ||||||
|     }; |     }; | ||||||
| @ -52,7 +52,7 @@ pub fn from_str(str: *char) -> String { | |||||||
| pub fn add_char(string: &mut String, c: char) { | pub fn add_char(string: &mut String, c: char) { | ||||||
|     if ((*string).length + 1) >= (*string).max_length { |     if ((*string).length + 1) >= (*string).max_length { | ||||||
|         let new = allocate((*string).max_length + 4) as *char; |         let new = allocate((*string).max_length + 4) as *char; | ||||||
|         copy_bits((*string).inner, new, 0, (*string).max_length); |         copy_bits((*string).inner, new, (*string).max_length); | ||||||
| 
 | 
 | ||||||
|         if (*string).must_be_freed == true { |         if (*string).must_be_freed == true { | ||||||
|             free((*string).inner as *u8); |             free((*string).inner as *u8); | ||||||
| @ -77,19 +77,18 @@ pub fn free_string(string: &mut String) { | |||||||
|     free((*string).inner as *u8); |     free((*string).inner as *u8); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| fn copy_bits(from: *char, to: *char, pos: u64, max: u64) -> u8 { | fn copy_bits(from: *char, to: *char, length: u64) { | ||||||
|     if (pos >= max) { |     for i in 0 .. length { | ||||||
|         return 0; |         to[i] = from[i]; | ||||||
|     } |     } | ||||||
|     to[pos] = from[pos]; |  | ||||||
|     return copy_bits(from, to, pos + 1, max); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| fn str_length(string: *char, position: u32) -> u32 { | fn str_length(string: *char) -> u32 { | ||||||
|     if (string[position] == '\0') { |     let mut pos = 0; | ||||||
|         return 0; |     while ((string[pos] == '\0') == false) { | ||||||
|  |         pos = pos + 1; | ||||||
|     } |     } | ||||||
|     return str_length(string, position + 1) + 1; |     return pos + 1; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub fn add_num_to_str(string: &mut String, num: u64) { | pub fn add_num_to_str(string: &mut String, num: u64) { | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user