emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/data.c [emacs-unicode-2]


From: Miles Bader
Subject: [Emacs-diffs] Changes to emacs/src/data.c [emacs-unicode-2]
Date: Tue, 29 Jun 2004 13:08:13 -0400

Index: emacs/src/data.c
diff -c emacs/src/data.c:1.224.4.4 emacs/src/data.c:1.224.4.5
*** emacs/src/data.c:1.224.4.4  Mon Jun 28 07:29:19 2004
--- emacs/src/data.c    Tue Jun 29 16:46:01 2004
***************
*** 1983,1993 ****
      }
  }
  
- /* Don't use alloca for relocating string data larger than this, lest
-    we overflow their stack.  The value is the same as what used in
-    fns.c for base64 handling.  */
- #define MAX_ALLOCA 16*1024
- 
  DEFUN ("aset", Faset, Saset, 3, 3, 0,
         doc: /* Store into the element of ARRAY at index IDX the value NEWELT.
  Return NEWELT.  ARRAY may be a vector, a string, a char-table or a
--- 1983,1988 ----
***************
*** 2051,2060 ****
          /* We must relocate the string data.  */
          int nchars = SCHARS (array);
          unsigned char *str;
  
!         str = (nbytes <= MAX_ALLOCA
!                ? (unsigned char *) alloca (nbytes)
!                : (unsigned char *) xmalloc (nbytes));
          bcopy (SDATA (array), str, nbytes);
          allocate_string_data (XSTRING (array), nchars,
                                nbytes + new_bytes - prev_bytes);
--- 2046,2054 ----
          /* We must relocate the string data.  */
          int nchars = SCHARS (array);
          unsigned char *str;
+         USE_SAFE_ALLOCA;
  
!         SAFE_ALLOCA (str, unsigned char *, nbytes);
          bcopy (SDATA (array), str, nbytes);
          allocate_string_data (XSTRING (array), nchars,
                                nbytes + new_bytes - prev_bytes);
***************
*** 2062,2069 ****
          p1 = SDATA (array) + idxval_byte;
          bcopy (str + idxval_byte + prev_bytes, p1 + new_bytes,
                 nbytes - (idxval_byte + prev_bytes));
!         if (nbytes > MAX_ALLOCA)
!           xfree (str);
          clear_string_char_byte_cache ();
        }
        while (new_bytes--)
--- 2056,2062 ----
          p1 = SDATA (array) + idxval_byte;
          bcopy (str + idxval_byte + prev_bytes, p1 + new_bytes,
                 nbytes - (idxval_byte + prev_bytes));
!         SAFE_FREE (nbytes);
          clear_string_char_byte_cache ();
        }
        while (new_bytes--)
***************
*** 2086,2099 ****
          unsigned char workbuf[MAX_MULTIBYTE_LENGTH], *p0 = workbuf, *p1;
          unsigned char *origstr = SDATA (array), *str;
          int nchars, nbytes;
  
          nchars = SCHARS (array);
          nbytes = idxval_byte = count_size_as_multibyte (origstr, idxval);
          nbytes += count_size_as_multibyte (origstr + idxval,
                                             nchars - idxval);
!         str = (nbytes <= MAX_ALLOCA
!                ? (unsigned char *) alloca (nbytes)
!                : (unsigned char *) xmalloc (nbytes));
          copy_text (SDATA (array), str, nchars, 0, 1);
          PARSE_MULTIBYTE_SEQ (str + idxval_byte, nbytes - idxval_byte,
                               prev_bytes);
--- 2079,2091 ----
          unsigned char workbuf[MAX_MULTIBYTE_LENGTH], *p0 = workbuf, *p1;
          unsigned char *origstr = SDATA (array), *str;
          int nchars, nbytes;
+         USE_SAFE_ALLOCA;
  
          nchars = SCHARS (array);
          nbytes = idxval_byte = count_size_as_multibyte (origstr, idxval);
          nbytes += count_size_as_multibyte (origstr + idxval,
                                             nchars - idxval);
!         SAFE_ALLOCA (str, unsigned char *, nbytes);
          copy_text (SDATA (array), str, nchars, 0, 1);
          PARSE_MULTIBYTE_SEQ (str + idxval_byte, nbytes - idxval_byte,
                               prev_bytes);
***************
*** 2106,2113 ****
            *p1++ = *p0++;
          bcopy (str + idxval_byte + prev_bytes, p1,
                 nbytes - (idxval_byte + prev_bytes));
!         if (nbytes > MAX_ALLOCA)
!           xfree (str);
          clear_string_char_byte_cache ();
        }
      }
--- 2098,2104 ----
            *p1++ = *p0++;
          bcopy (str + idxval_byte + prev_bytes, p1,
                 nbytes - (idxval_byte + prev_bytes));
!         SAFE_FREE (nbytes);
          clear_string_char_byte_cache ();
        }
      }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]