diff src/fns.c @ 103095:65cc22e2c624

* fns.c (Flocale_info): Protect vector from GC during decoding. * process.c (Fstart_process): Protect argv strings from GC during encoding.
author Andreas Schwab <schwab@linux-m68k.org>
date Tue, 28 Apr 2009 19:02:26 +0000
parents dfed39918c22
children 2b13858c8a2f
line wrap: on
line diff
--- a/src/fns.c	Tue Apr 28 19:00:38 2009 +0000
+++ b/src/fns.c	Tue Apr 28 19:02:26 2009 +0000
@@ -3135,8 +3135,10 @@
   else if (EQ (item, Qdays))	/* e.g. for calendar-day-name-array */
     {
       Lisp_Object v = Fmake_vector (make_number (7), Qnil);
-      int days[7] = {DAY_1, DAY_2, DAY_3, DAY_4, DAY_5, DAY_6, DAY_7};
+      const int days[7] = {DAY_1, DAY_2, DAY_3, DAY_4, DAY_5, DAY_6, DAY_7};
       int i;
+      struct gcpro gcpro1;
+      GCPRO1 (v);
       synchronize_system_time_locale ();
       for (i = 0; i < 7; i++)
 	{
@@ -3148,26 +3150,29 @@
 		 code_convert_string_norecord (val, Vlocale_coding_system,
 					       0));
 	}
+      UNGCPRO;
       return v;
     }
 #endif	/* DAY_1 */
 #ifdef MON_1
   else if (EQ (item, Qmonths))	/* e.g. for calendar-month-name-array */
     {
-      struct Lisp_Vector *p = allocate_vector (12);
-      int months[12] = {MON_1, MON_2, MON_3, MON_4, MON_5, MON_6, MON_7,
-			MON_8, MON_9, MON_10, MON_11, MON_12};
+      Lisp_Object v = Fmake_vector (make_number (12), Qnil);
+      const int months[12] = {MON_1, MON_2, MON_3, MON_4, MON_5, MON_6, MON_7,
+			      MON_8, MON_9, MON_10, MON_11, MON_12};
       int i;
+      struct gcpro gcpro1;
+      GCPRO1 (v);
       synchronize_system_time_locale ();
       for (i = 0; i < 12; i++)
 	{
 	  str = nl_langinfo (months[i]);
 	  val = make_unibyte_string (str, strlen (str));
-	  p->contents[i] =
-	    code_convert_string_norecord (val, Vlocale_coding_system, 0);
+	  Faset (v, make_number (i),
+		 code_convert_string_norecord (val, Vlocale_coding_system, 0));
 	}
-      XSETVECTOR (val, p);
-      return val;
+      UNGCPRO;
+      return v;
     }
 #endif	/* MON_1 */
 /* LC_PAPER stuff isn't defined as accessible in glibc as of 2.3.1,