• Paul Eggert's avatar
    Use putenv+unsetenv instead of modifying environ directly. · 5745a7df
    Paul Eggert authored
    * admin/merge-gnulib (GNULIB_MODULES): Add putenv, unsetenv.
    * lib/putenv.c, lib/unsetenv.c, m4/putenv.m4, m4/setenv.m4:
    New files, copied automatically from gnulib.
    * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
    * src/alloc.c (xputenv): New function.
    * src/dbusbind.c (Fdbus_init_bus):
    * src/emacs.c (main):
    * src/xterm.c (x_term_init):
    Use xputenv instead of setenv or putenv, to detect memory exhaustion.
    * src/editfns.c (initial_tz): Move static var decl up.
    (tzvalbuf_in_environ): New static var.
    (init_editfns):	Initialize these two static vars.
    (Fencode_time): Don't assume arbitrary limit on EMACS_INT width.
    Save old TZ value on stack, if it's small.
    (Fencode_time, set_time_zone_rule): Don't modify 'environ' directly;
    instead, use xputenv+unsetenv to set and restore TZ.
    (environbuf): Remove static var.  All uses removed.
    (Fset_time_zone_rule): Do not save TZ and environ;
    no longer needed here.
    (set_time_zone_rule_tz1, set_time_zone_rule_tz2) [LOCALTIME_CACHE]:
    Move to inside set_time_zone_rule; they don't need file scope any more.
    (set_time_zone_rule): Maintain the TZ=value string separately.
    (syms_of_editfns): Don't initialize initial_tz;
    init_editfns now does it.
    * src/emacs.c (dump_tz) [HAVE_TZSET]: Now const.
    * src/lisp.h (xputenv): New decl.
    
    Fixes: debbugs:13070
    5745a7df
lisp.h 131 KB