The patch contains mostly fixes for the disassembler. It also fixes
[deliverable/binutils-gdb.git] / gas / listing.c
index 03dcfe802663a3167587be92beb14e1c34f413a9..c92f2db11c33682ee5f1edce45f85072e62a6ec4 100644 (file)
@@ -1,5 +1,6 @@
 /* listing.c - mainting assembly listings
-   Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000
+   Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+   2001
    Free Software Foundation, Inc.
 
 This file is part of GAS, the GNU Assembler.
@@ -90,10 +91,9 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
                         on a line
 */
 
-#include <ctype.h>
-
 #include "as.h"
 #include <obstack.h>
+#include "safe-ctype.h"
 #include "input-file.h"
 #include "subsegs.h"
 
@@ -226,12 +226,12 @@ listing_message (name, message)
      const char *name;
      const char *message;
 {
-  unsigned int l = strlen (name) + strlen (message) + 1;
-  char *n = (char *) xmalloc (l);
-  strcpy (n, name);
-  strcat (n, message);
   if (listing_tail != (list_info_type *) NULL)
     {
+      unsigned int l = strlen (name) + strlen (message) + 1;
+      char *n = (char *) xmalloc (l);
+      strcpy (n, name);
+      strcat (n, message);
       listing_tail->message = n;
     }
 }
@@ -369,7 +369,7 @@ listing_newline (ps)
                  unsigned char c = *src++;
 
                  /* Omit control characters in the listing.  */
-                 if (isascii (c) && ! iscntrl (c))
+                 if (!ISCNTRL (c))
                    *dest++ = c;
                }
 
@@ -484,7 +484,7 @@ buffer_line (file, line, size)
        }
 
       last_open_file_info = file;
-      last_open_file = fopen (file->filename, "r");
+      last_open_file = fopen (file->filename, FOPEN_RT);
       if (last_open_file == NULL)
        {
          file->at_end = 1;
@@ -513,9 +513,12 @@ buffer_line (file, line, size)
   if (c == EOF)
     {
       file->at_end = 1;
-      *p++ = '.';
-      *p++ = '.';
-      *p++ = '.';
+      if (count + 2 < size)
+       {
+         *p++ = '.';
+         *p++ = '.';
+         *p++ = '.';
+       }
     }
   file->linenum++;
   *p++ = 0;
@@ -907,7 +910,7 @@ debugging_pseudo (list, line)
   was_debug = in_debug;
   in_debug = 0;
 
-  while (isspace ((unsigned char) *line))
+  while (ISSPACE (*line))
     line++;
 
   if (*line != '.')
@@ -1007,6 +1010,8 @@ listing_listing (name)
          show_listing--;
          break;
        case EDICT_NOLIST_NEXT:
+         if (show_listing == 0)
+           list_line--;
          break;
        case EDICT_EJECT:
          break;
@@ -1029,7 +1034,8 @@ listing_listing (name)
            p = buffer_line (list->file, buffer, width);
        }
 
-      if (list->edict == EDICT_LIST)
+      if (list->edict == EDICT_LIST
+         || (list->edict == EDICT_NOLIST_NEXT && show_listing == 0))
        {
          /* Enable listing for the single line that caused the enable.  */
          list_line++;
@@ -1090,7 +1096,7 @@ listing_listing (name)
            }
        }
 
-      if (list->edict == EDICT_NOLIST_NEXT)
+      if (list->edict == EDICT_NOLIST_NEXT && show_listing == 1)
        --show_listing;
 
       list = list->next;
@@ -1117,7 +1123,7 @@ listing_print (name)
     }
   else
     {
-      list_file = fopen (name, "w");
+      list_file = fopen (name, FOPEN_WT);
       if (list_file != NULL)
        using_stdout = 0;
       else
@@ -1291,7 +1297,7 @@ listing_title (depth)
        }
       else if (*input_line_pointer == '\n')
        {
-         as_bad (_("New line in title"));
+         as_bad (_("new line in title"));
          demand_empty_rest_of_line ();
          return;
        }
This page took 0.024497 seconds and 4 git commands to generate.