~vorlon/ubuntu/natty/eglibc/multiarch

« back to all changes in this revision

Viewing changes to sysdeps/unix/sysv/linux/getrlimit64.c

  • Committer: Steve Langasek
  • Date: 2011-02-18 21:18:44 UTC
  • mfrom: (103.1.7 eglibc)
  • Revision ID: steve.langasek@linaro.org-20110218211844-lodmi8b1qhyq3f3x
Tags: 2.13~pre1-0ubuntu1+multiarch.1
merge from natty

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Copyright (C) 2010, 2011 Free Software Foundation, Inc.
 
2
   This file is part of the GNU C Library.
 
3
 
 
4
   The GNU C Library is free software; you can redistribute it and/or
 
5
   modify it under the terms of the GNU Lesser General Public
 
6
   License as published by the Free Software Foundation; either
 
7
   version 2.1 of the License, or (at your option) any later version.
 
8
 
 
9
   The GNU C Library is distributed in the hope that it will be useful,
 
10
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
12
   Lesser General Public License for more details.
 
13
 
 
14
   You should have received a copy of the GNU Lesser General Public
 
15
   License along with the GNU C Library; if not, write to the Free
 
16
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
 
17
   02111-1307 USA.  */
 
18
 
 
19
#include <errno.h>
 
20
#include <sys/resource.h>
 
21
#include <sys/types.h>
 
22
#include <sysdep.h>
 
23
#include <kernel-features.h>
 
24
 
 
25
/* Put the soft and hard limits for RESOURCE in *RLIMITS.
 
26
   Returns 0 if successful, -1 if not (and sets errno).  */
 
27
int
 
28
getrlimit64 (enum __rlimit_resource resource, struct rlimit64 *rlimits)
 
29
{
 
30
#ifdef __ASSUME_PRLIMIT64
 
31
  return INLINE_SYSCALL (prlimit64, 4, 0, resource, NULL, rlimits);
 
32
#else
 
33
# ifdef __NR_prlimit64
 
34
  int res = INLINE_SYSCALL (prlimit64, 4, 0, resource, NULL, rlimits);
 
35
  if (res == 0 || errno != ENOSYS)
 
36
    return res;
 
37
# endif
 
38
  struct rlimit rlimits32;
 
39
 
 
40
  if (__getrlimit (resource, &rlimits32) < 0)
 
41
    return -1;
 
42
 
 
43
  if (rlimits32.rlim_cur == RLIM_INFINITY)
 
44
    rlimits->rlim_cur = RLIM64_INFINITY;
 
45
  else
 
46
    rlimits->rlim_cur = rlimits32.rlim_cur;
 
47
  if (rlimits32.rlim_max == RLIM_INFINITY)
 
48
    rlimits->rlim_max = RLIM64_INFINITY;
 
49
  else
 
50
    rlimits->rlim_max = rlimits32.rlim_max;
 
51
 
 
52
  return 0;
 
53
#endif
 
54
}
 
55
libc_hidden_def (getrlimit64)