portability fixes


git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@715 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/libasn1parser/Makefile.in b/libasn1parser/Makefile.in
index ef80e29..cb9ebd0 100644
--- a/libasn1parser/Makefile.in
+++ b/libasn1parser/Makefile.in
@@ -447,9 +447,9 @@
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
+	-rm -f asn1p_l.c
 	-rm -f asn1p_y.c
 	-rm -f asn1p_y.h
-	-rm -f asn1p_l.c
 clean: clean-am
 
 clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
diff --git a/libasn1parser/asn1p_expr2uclass.h b/libasn1parser/asn1p_expr2uclass.h
index 8bb4f63..1fb6dbb 100644
--- a/libasn1parser/asn1p_expr2uclass.h
+++ b/libasn1parser/asn1p_expr2uclass.h
@@ -1,6 +1,10 @@
 #ifndef	ASN1_PARSER_EXPR2UCLASS_H
 #define	ASN1_PARSER_EXPR2UCLASS_H
 
+#ifndef	__GNUC__
+#define	__attribute__(x)	/* unused */
+#endif
+
 static int expr_type2uclass_value[ASN_EXPR_TYPE_MAX]
 		__attribute__ ((unused)) = {
 	[ ASN_BASIC_BOOLEAN ]		= 1,
diff --git a/libasn1parser/asn1p_expr_str.h b/libasn1parser/asn1p_expr_str.h
index d99f835..8e9545d 100644
--- a/libasn1parser/asn1p_expr_str.h
+++ b/libasn1parser/asn1p_expr_str.h
@@ -5,6 +5,10 @@
 #ifndef	ASN1_PARSER_EXPR_STR_H
 #define	ASN1_PARSER_EXPR_STR_H
 
+#ifndef	__GNUC__
+#define	__attribute__(x)	/* unused */
+#endif
+
 static char *asn1p_expr_type2str[] __attribute__ ((unused)) = {
 	[ ASN_CONSTR_SEQUENCE ]	 = "SEQUENCE",
 	[ ASN_CONSTR_CHOICE ]	 = "CHOICE",
diff --git a/libasn1parser/asn1p_list.h b/libasn1parser/asn1p_list.h
index 4a71fdd..9d5748c 100644
--- a/libasn1parser/asn1p_list.h
+++ b/libasn1parser/asn1p_list.h
@@ -37,11 +37,11 @@
 	for((var) = TQ_FIRST((head));			\
 		(var); (var) = TQ_NEXT((var), field))
 
+/* MSVC does not have typeof(), cannot prevent side effects! */
 #define	TQ_ADD(head, xel, field) do {			\
-	typeof(xel) __el = xel;				\
-	assert(TQ_NEXT((__el), field) == 0);		\
-        *(head)->tq_tail = (__el);			\
-        (head)->tq_tail = &TQ_NEXT((__el), field);	\
+	assert(TQ_NEXT((xel), field) == 0);		\
+        *(head)->tq_tail = (xel);			\
+        (head)->tq_tail = &TQ_NEXT((xel), field);	\
 	} while(0)
 
 /*
diff --git a/libasn1parser/asn1parser.c b/libasn1parser/asn1parser.c
index 6a3477d..c820cc4 100644
--- a/libasn1parser/asn1parser.c
+++ b/libasn1parser/asn1parser.c
@@ -35,7 +35,7 @@
 	}
 
 	if(size < 0)
-		size = strlen(buffer);
+		size = (int)strlen(buffer);
 
 	ybuf = asn1p__scan_bytes(buffer, size);
 	if(!ybuf) {
@@ -67,7 +67,9 @@
  */
 asn1p_t *
 asn1p_parse_file(const char *filename, enum asn1p_flags flags) {
+#ifndef	WIN32
 	struct stat sb;
+#endif
 	asn1p_t *a = 0;
 	void *ap;
 	FILE *fp;
@@ -84,6 +86,7 @@
 		return NULL;
 	}
 
+#ifndef	WIN32
 	if(fstat(fileno(fp), &sb)
 	|| !S_ISREG(sb.st_mode)) {
 		fclose(fp);
@@ -92,6 +95,7 @@
 		errno = EINVAL;
 		return NULL;
 	}
+#endif	/* WIN32 */
 
 	asn1p_lineno = 1;
 
diff --git a/libasn1parser/asn1parser.h b/libasn1parser/asn1parser.h
index ff7e410..d5a09a9 100644
--- a/libasn1parser/asn1parser.h
+++ b/libasn1parser/asn1parser.h
@@ -38,16 +38,16 @@
 #define	PRIuASN	"llu"	/* Or j? */
 #endif
 
-#include <asn1p_list.h>
-#include <asn1p_oid.h>		/* Object identifiers (OIDs) */
-#include <asn1p_ref.h>		/* References to custom types */
-#include <asn1p_value.h>	/* Value definition */
-#include <asn1p_param.h>	/* Parametrization */
-#include <asn1p_constr.h>	/* Type Constraints */
-#include <asn1p_xports.h>	/* IMports/EXports */
-#include <asn1p_module.h>	/* ASN.1 definition module */
-#include <asn1p_class.h>	/* CLASS-related stuff */
-#include <asn1p_expr.h>		/* A single ASN.1 expression */
+#include "asn1p_list.h"
+#include "asn1p_oid.h"		/* Object identifiers (OIDs) */
+#include "asn1p_ref.h"		/* References to custom types */
+#include "asn1p_value.h"	/* Value definition */
+#include "asn1p_param.h"	/* Parametrization */
+#include "asn1p_constr.h"	/* Type Constraints */
+#include "asn1p_xports.h"	/* IMports/EXports */
+#include "asn1p_module.h"	/* ASN.1 definition module */
+#include "asn1p_class.h"	/* CLASS-related stuff */
+#include "asn1p_expr.h"		/* A single ASN.1 expression */
 
 /*
  * Parser flags.
diff --git a/libasn1parser/expr-h.pl b/libasn1parser/expr-h.pl
index a66425a..ce916d7 100755
--- a/libasn1parser/expr-h.pl
+++ b/libasn1parser/expr-h.pl
@@ -9,6 +9,10 @@
 #ifndef	ASN1_PARSER_EXPR_STR_H
 #define	ASN1_PARSER_EXPR_STR_H
 
+#ifndef	__GNUC__
+#define	__attribute__(x)	/* unused */
+#endif
+
 static char *asn1p_expr_type2str[] __attribute__ ((unused)) = {
 EOM