view src/mem-limits.h @ 2545:9caf26dd924f

[xemacs-hg @ 2005-02-03 05:03:36 by ben] behavior ws #2: menu-related changes menubar.c: New fun to compare menu itext as if the two were normalized. menubar.c: Rename; there are no external callers of this function. Remove unneeded BUFFER argument. Don't downcase. (This will be done in compare-menu-text.) Document that return value may be same string. easymenu.el, map-ynp.el: Use normalize-menu-text not normalize-menu-item-name. menubar-items.el, menubar.el: Move to menubar.el and rewrite for cleanliness. menubar-items.el: Use menu-split-long-menu-and-sort. menubar-items.el, menubar.el: Move to menubar.el. menubar.el: New funs. menubar.el: Split up find-menu-item w/find-menu-item-1, since PARENT is not an external item. Rewrite to use compare-menu-text. menubar.el: Don't normalize items as find-menu-item does not need it. menubar-items.el: Delete old Behavior menu defn, replaced by behavior-menu-filter. Planning to [[Delete many menus from Tools menu -- they have been integrated as part of the behavior system.]] Currently the new Tools menu (very short, just a call to the behavior-menu-filter) is commented out, and the old Toold menu defn remains. Once the new packages are in place (c. 1 or 2 weeks), I'll make the switchover. Use menu-split-long-menu-and-sort.
author ben
date Thu, 03 Feb 2005 05:03:45 +0000
parents 702b5727498a
children 308d34e9f07d
line wrap: on
line source

/* Includes for memory limit warnings.
   Copyright (C) 1990, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.

This file is part of XEmacs.

XEmacs is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.

XEmacs is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License
along with XEmacs; see the file COPYING.  If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.  */

/* Synched up with: FSF 19.30. */

/* Subsequently cleaned up and reorganised, made to use configure. */ 

#ifndef INCLUDED_mem_limits_h_
#define INCLUDED_mem_limits_h_

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#ifdef HAVE_ULIMIT_H
#include <ulimit.h>
#endif

#ifdef HAVE_SYS_RESOURCE_H
/* Some systems need either sys/types.h or sys/time.h before <sys/resource.h>.  */
#include <sys/types.h>
#include <sys/time.h>
#include <sys/resource.h>
#endif

#ifdef HAVE_SYS_VLIMIT_H
#include <sys/vlimit.h>
#endif

#ifdef _LIBC

/* Old Linux startup code won't define __data_start.  */
extern int etext, __data_start; weak_symbol (__data_start)
#define start_of_data()	(&__data_start ?: &etext)

#else /* not GNU libc */

#ifdef emacs
typedef void *POINTER;

#ifndef CYGWIN
typedef unsigned long SIZE;
#endif

extern POINTER start_of_data (void);
#define EXCEEDS_LISP_PTR(ptr) 0

#ifdef BSD
extern int etext;
#define start_of_data() &etext
#endif

#else  /* not emacs */
extern char etext;
#define start_of_data() &etext
#endif /* not emacs */

#endif /* not _LIBC */



/* start of data space; can be changed by calling malloc_init */
static POINTER data_space_start;

/* Number of bytes of writable memory we can expect to be able to get */
extern unsigned long lim_data;

/* The implementation of get_lim_data() is very machine dependent. */

#if defined (HEAP_IN_DATA) && !defined(PDUMP)
extern unsigned long static_heap_size;
extern MODULE_API int initialized;

static void
get_lim_data (void)
{
  if (!initialized)
    {
      lim_data = (unsigned long) -1; /* static_heap_size; */
    }
  else
    {
      lim_data = (unsigned long) -1;
    }
}

#elif defined(NO_LIM_DATA)

static void
get_lim_data (void)
{
  lim_data = (unsigned long) -1;
}

#elif defined(HAVE_GETRLIMIT)

static void
get_lim_data (void)
{
  struct rlimit XXrlimit;

  getrlimit (RLIMIT_DATA, &XXrlimit);
#ifdef RLIM_INFINITY
  lim_data = XXrlimit.rlim_cur & RLIM_INFINITY; /* soft limit */
#else
  lim_data = XXrlimit.rlim_cur;	/* soft limit */
#endif
}

#elif defined(HAVE_ULIMIT)

static void
get_lim_data (void)
{
  lim_data = (unsigned long) -1;

  /* Use the ulimit call, if we seem to have it.  */
#if !defined (ULIMIT_BREAK_VALUE)
  lim_data = ulimit (3, 0);
#endif

  /* If that didn't work, just use the macro's value.  */
#ifdef ULIMIT_BREAK_VALUE
  if (lim_data == (unsigned long) -1)
    lim_data = ULIMIT_BREAK_VALUE;
#endif

  lim_data -= (long) data_space_start;
}

#elif defined(WIN32_NATIVE)

static void
get_lim_data (void)
{
  extern unsigned long data_region_size;
  lim_data = data_region_size;
}

#elif defined(HAVE_VLIMIT)

static void
get_lim_data (void)
{
  lim_data = vlimit (LIM_DATA, -1);
}

#else
#error Cannot determine an implementation of get_lim_data().
#endif /* not HAVE_VLIMIT */

#endif /* INCLUDED_mem_limits_h_ */