about summary refs log tree commit diff
path: root/conform
diff options
context:
space:
mode:
Diffstat (limited to 'conform')
-rw-r--r--conform/conformtest.pl53
-rw-r--r--conform/data/netinet/in.h-data2
-rw-r--r--conform/data/sys/socket.h-data1
3 files changed, 40 insertions, 16 deletions
diff --git a/conform/conformtest.pl b/conform/conformtest.pl
index 5ae1cea45a..364e34d2a4 100644
--- a/conform/conformtest.pl
+++ b/conform/conformtest.pl
@@ -224,11 +224,19 @@ sub newtoken {
   if ($isknown{$token}) {
     ++$nknown;
   } else {
-    ++$nerrors;
-    if ($nerrors == 1) {
-      printf ("FAIL\n    " . "-" x 72 . "\n");
-    }
-    printf ("    Namespace violation: \"%s\"\n", $token);
+    $errors{$token} = 1;
+  }
+}
+
+
+sub removetoken {
+  my($token) = @_;
+  my($idx);
+
+  return if ($token =~ /^[0-9_]/ || $iskeyword{$token});
+
+  if (exists $errors{$token}) {
+    undef $errors{$token};
   }
 }
 
@@ -243,14 +251,15 @@ sub checknamespace {
   print TESTFILE "#include <$h>\n";
   close (TESTFILE);
 
-  $nerrors = 0;
+  undef %errors;
   $nknown = 0;
   open (CONTENT, "$CC $CFLAGS{$dialect} -E $fnamebase.c -P -Wp,-dN | sed -e '/^# [1-9]/d' -e '/^[[:space:]]*\$/d' |");
   loop: while (<CONTENT>) {
-    next loop if (/^#undef /);
     chop;
     if (/^#define (.*)/) {
       newtoken ($1, @allow);
+    } elsif (/^#undef (.*)/) {
+      removetoken ($1);
     } else {
       # We have to tokenize the line.
       my($str) = $_;
@@ -266,14 +275,28 @@ sub checknamespace {
   }
   close (CONTENT);
   unlink "$fnamebase.c";
-  if ($nerrors != 0) {
-    printf ("    " . "-" x 72 . "\n");
-    ++$errors;
-  } elsif ($nknown > 0) {
-    printf ("EXPECTED FAILURES\n");
-    ++$known;
-  } else {
-    printf ("OK\n");
+  $realerror = 0;
+  if ($#errors != 0) {
+    foreach $f (%errors) {
+      if ($errors{$f} == 1) {
+	if ($realerror == 0) {
+	  printf ("FAIL\n    " . "-" x 72 . "\n");
+	  $realerror = 1;
+	  ++$errors;
+	}
+	printf ("    Namespace violation: \"%s\"\n", $f);
+      }
+    }
+    printf ("    " . "-" x 72 . "\n") if ($realerror != 0);
+  }
+
+  if ($realerror == 0) {
+    if ($nknown > 0) {
+      printf ("EXPECTED FAILURES\n");
+      ++$known;
+    } else {
+      printf ("OK\n");
+    }
   }
 }
 
diff --git a/conform/data/netinet/in.h-data b/conform/data/netinet/in.h-data
index 9b7d05e821..1f1955d1a6 100644
--- a/conform/data/netinet/in.h-data
+++ b/conform/data/netinet/in.h-data
@@ -58,7 +58,7 @@ function uint16_t htons (uint16_t)
 function uint32_t ntohl (uint32_t)
 function uint16_t ntohs (uint16_t)
 
-allow-header intttypes.h
+allow-header inttypes.h
 allow-header arpa/inet.h
 
 constant INET6_ADDRSTRLEN 46
diff --git a/conform/data/sys/socket.h-data b/conform/data/sys/socket.h-data
index 151ade5b92..61f30abc82 100644
--- a/conform/data/sys/socket.h-data
+++ b/conform/data/sys/socket.h-data
@@ -103,6 +103,7 @@ function int setsockopt (int, int, int, const void*, socklen_t)
 function int shutdown (int, int)
 function int socket (int, int, int)
 function int socketpair (int, int, int, int[2])
+function int sockatmark (int)
 
 allow-header sys/uio.h