diff lwasm/input.c @ 332:67224d8d1024

Basic input layer works
author lost
date Tue, 02 Mar 2010 00:10:32 +0000
parents 81c005b82775
children 7166254491ed
line wrap: on
line diff
--- a/lwasm/input.c	Sun Feb 28 05:55:07 2010 +0000
+++ b/lwasm/input.c	Tue Mar 02 00:10:32 2010 +0000
@@ -84,7 +84,7 @@
 	int o;
 	
 	dn = lw_strdup(fn);
-	dp = dn + strlen(dp);
+	dp = dn + strlen(dn);
 	
 	while (--dp != dn)
 	{
@@ -130,9 +130,9 @@
 	t = lw_alloc(sizeof(struct input_stack));
 	t -> filespec = lw_strdup(s);
 
-	for (s2 = s; *s2 && *s2 != ':'; s2++)
+	for (s2 = s; *s2 && (*s2 != ':'); s2++)
 		/* do nothing */ ;
-	if (!s2)
+	if (!*s2)
 	{
 		t -> type = input_type_file;
 	}
@@ -142,16 +142,16 @@
 		
 		ts = lw_strndup(s, s2 - s);
 		s = s2 + 1;
-		
 		if (!strcmp(ts, "include"))
 			t -> type = input_type_include;
 		else if (!strcmp(ts, "file"))
 			t -> type = input_type_file;
 		else
 			t -> type = input_type_error;
+		
+		lw_free(ts);
 	}
-		
-	t -> next = IS;
+	t -> next = as -> input_data;
 	as -> input_data = t;
 	
 	switch (IS -> type)
@@ -198,7 +198,7 @@
 			lw_stringlist_next(as -> include_list);
 		}
 		lw_error("Cannot open include file '%s': %s", s, strerror(errno));
-
+		
 	case input_type_file:
 		IS -> data = fopen(s, "rb");
 
@@ -210,7 +210,7 @@
 		return;
 	}
 
-	lw_error("Cannot figure out how to open '%s'.", s);
+	lw_error("Cannot figure out how to open '%s'.", t -> filespec);
 }
 
 char *input_readline(asmstate_t *as)
@@ -235,11 +235,11 @@
 	case input_type_file:
 	case input_type_include:
 		/* read from a file */
+		lbloc = 0;
 		for (;;)
 		{
 			int c, c2;
 			c = fgetc(IS -> data);
-			lbloc = 0;
 			if (c == EOF)
 			{
 				if (lbloc == 0)