Deleted Added
full compact
procfs_rlimit.c (77031) procfs_rlimit.c (87321)
1/*
2 * Copyright (c) 1999 Adrian Chadd
3 * Copyright (c) 1993
4 * The Regents of the University of California. All rights reserved.
5 *
6 * This code is derived from software contributed to Berkeley by
7 * Jan-Simon Pendry.
8 *

--- 22 unchanged lines hidden (view full) ---

31 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35 * SUCH DAMAGE.
36 *
37 * @(#)procfs_status.c 8.4 (Berkeley) 6/15/94
38 *
1/*
2 * Copyright (c) 1999 Adrian Chadd
3 * Copyright (c) 1993
4 * The Regents of the University of California. All rights reserved.
5 *
6 * This code is derived from software contributed to Berkeley by
7 * Jan-Simon Pendry.
8 *

--- 22 unchanged lines hidden (view full) ---

31 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35 * SUCH DAMAGE.
36 *
37 * @(#)procfs_status.c 8.4 (Berkeley) 6/15/94
38 *
39 * $FreeBSD: head/sys/fs/procfs/procfs_rlimit.c 77031 2001-05-23 09:42:29Z ru $
39 * $FreeBSD: head/sys/fs/procfs/procfs_rlimit.c 87321 2001-12-04 01:35:06Z des $
40 */
41
42/*
43 * To get resource.h to include our rlimit_ident[] array of rlimit identifiers
44 */
45
46#define _RLIMIT_IDENT
47
48#include <sys/param.h>
49#include <sys/systm.h>
50#include <sys/proc.h>
40 */
41
42/*
43 * To get resource.h to include our rlimit_ident[] array of rlimit identifiers
44 */
45
46#define _RLIMIT_IDENT
47
48#include <sys/param.h>
49#include <sys/systm.h>
50#include <sys/proc.h>
51#include <sys/vnode.h>
52#include <sys/resourcevar.h>
53#include <sys/resource.h>
51#include <sys/resourcevar.h>
52#include <sys/resource.h>
54#include <sys/types.h>
53#include <sys/sbuf.h>
54
55#include <fs/pseudofs/pseudofs.h>
55#include <fs/procfs/procfs.h>
56
57
58int
56#include <fs/procfs/procfs.h>
57
58
59int
59procfs_dorlimit(curp, p, pfs, uio)
60 struct proc *curp;
61 struct proc *p;
62 struct pfsnode *pfs;
63 struct uio *uio;
60procfs_doprocrlimit(PFS_FILL_ARGS)
64{
61{
65 char *ps;
66 int i;
62 int i;
67 int xlen;
68 int error;
69 char psbuf[512]; /* XXX - conservative */
70
63
71 if (uio->uio_rw != UIO_READ)
72 return (EOPNOTSUPP);
73
74
75 ps = psbuf;
76
77 for (i = 0; i < RLIM_NLIMITS; i++) {
78
79 /*
80 * Add the rlimit ident
81 */
82
64 for (i = 0; i < RLIM_NLIMITS; i++) {
65
66 /*
67 * Add the rlimit ident
68 */
69
83 ps += sprintf(ps, "%s ", rlimit_ident[i]);
70 sbuf_printf(sb, "%s ", rlimit_ident[i]);
84
85 /*
86 * Replace RLIM_INFINITY with -1 in the string
87 */
88
89 /*
90 * current limit
91 */
92
93 if (p->p_rlimit[i].rlim_cur == RLIM_INFINITY) {
71
72 /*
73 * Replace RLIM_INFINITY with -1 in the string
74 */
75
76 /*
77 * current limit
78 */
79
80 if (p->p_rlimit[i].rlim_cur == RLIM_INFINITY) {
94 ps += sprintf(ps, "-1 ");
81 sbuf_printf(sb, "-1 ");
95 } else {
82 } else {
96 ps += sprintf(ps, "%llu ",
83 sbuf_printf(sb, "%llu ",
97 (unsigned long long)p->p_rlimit[i].rlim_cur);
98 }
99
100 /*
101 * maximum limit
102 */
103
104 if (p->p_rlimit[i].rlim_max == RLIM_INFINITY) {
84 (unsigned long long)p->p_rlimit[i].rlim_cur);
85 }
86
87 /*
88 * maximum limit
89 */
90
91 if (p->p_rlimit[i].rlim_max == RLIM_INFINITY) {
105 ps += sprintf(ps, "-1\n");
92 sbuf_printf(sb, "-1\n");
106 } else {
93 } else {
107 ps += sprintf(ps, "%llu\n",
94 sbuf_printf(sb, "%llu\n",
108 (unsigned long long)p->p_rlimit[i].rlim_max);
109 }
110 }
111
95 (unsigned long long)p->p_rlimit[i].rlim_max);
96 }
97 }
98
112 /*
113 * This logic is rather tasty - but its from procfs_status.c, so
114 * I guess I'll use it here.
115 */
116
117 xlen = ps - psbuf;
118 xlen -= uio->uio_offset;
119 ps = psbuf + uio->uio_offset;
120 xlen = imin(xlen, uio->uio_resid);
121 if (xlen <= 0)
122 error = 0;
123 else
124 error = uiomove(ps, xlen, uio);
125
126 return (error);
99 return (0);
127}
128
100}
101