unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Michael Mauger <mmaug@yahoo.com>
Subject: Windows XBM patch
Date: Thu, 6 Nov 2003 09:05:23 -0800 (PST)	[thread overview]
Message-ID: <20031106170523.43662.qmail@web60305.mail.yahoo.com> (raw)

I've been encountering intermittent Access Violations using a current CVS
snapshot of Emacs on Windows.  The most common failure situation was when
customizing a face.  I eventually tracked down the problem to the use of
signed char's being passed to the isXXXXX() family of functions.  In
`xbm_scan' data is passed via a `char**'.  The first byte of the one of
the bitmaps was 0xc0 (192) which was treated via signed arithmetic as 
-64.  This value was passed to isspace() which, in MSVCRTL, is used as an
index to an array of character flags.  Depending on what was mapped 64
bytes prior to the array, I would get an Access Violation.

The following patch modifies the handling of XBM data in w32fncs.c so
that it uses unsigned arithmetic throughout.

-- Michael

 
***********************************************************************/

 static Lisp_Object x_find_image_file P_ ((Lisp_Object));
-static char *slurp_file P_ ((char *, int *));
+static unsigned char *slurp_file P_ ((char *, int *));


 /* Find image file FILE.  Look in data-directory, then
@@ -8278,13 +8278,13 @@
    with xmalloc holding FILE's contents.  Value is null if an error
    occurred.  *SIZE is set to the size of the file.  */

-static char *
+static unsigned char *
 slurp_file (file, size)
      char *file;
      int *size;
 {
   FILE *fp = NULL;
-  char *buf = NULL;
+  unsigned char *buf = NULL;
   struct stat st;

   if (stat (file, &st) == 0
@@ -8315,12 +8315,14 @@
 			      XBM images
 
***********************************************************************/

-static int xbm_scan P_ ((char **, char *, char *, int *));
+static int xbm_scan P_ ((unsigned char **, unsigned char *,
+			 char *, int *));
 static int xbm_load P_ ((struct frame *f, struct image *img));
 static int xbm_load_image P_ ((struct frame *f, struct image *img,
-			       char *, char *));
+			       unsigned char *, unsigned char *));
 static int xbm_image_p P_ ((Lisp_Object object));
-static int xbm_read_bitmap_data P_ ((char *, char *, int *, int *,
+static int xbm_read_bitmap_data P_ ((unsigned char *, unsigned char *,
+				     int *, int *,
 				     unsigned char **));
 static int xbm_file_p P_ ((Lisp_Object));

@@ -8510,11 +8512,11 @@

 static int
 xbm_scan (s, end, sval, ival)
-     char **s, *end;
+     unsigned char **s, *end;
      char *sval;
      int *ival;
 {
-  int c;
+  unsigned int c;

  loop:

@@ -8644,11 +8646,11 @@

 static int
 xbm_read_bitmap_data (contents, end, width, height, data)
-     char *contents, *end;
+     unsigned char *contents, *end;
      int *width, *height;
      unsigned char **data;
 {
-  char *s = contents;
+  unsigned char *s = contents;
   char buffer[BUFSIZ];
   int padding_p = 0;
   int v10 = 0;
@@ -8826,7 +8828,7 @@
 xbm_load_image (f, img, contents, end)
      struct frame *f;
      struct image *img;
-     char *contents, *end;
+     unsigned char *contents, *end;
 {
   int rc;
   unsigned char *data;
@@ -8914,7 +8916,7 @@
   if (STRINGP (file_name))
     {
       Lisp_Object file;
-      char *contents;
+      unsigned char *contents;
       int size;
       struct gcpro gcpro1;



__________________________________
Do you Yahoo!?
Protect your identity with Yahoo! Mail AddressGuard
http://antispam.yahoo.com/whatsnewfree

                 reply	other threads:[~2003-11-06 17:05 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20031106170523.43662.qmail@web60305.mail.yahoo.com \
    --to=mmaug@yahoo.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).