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 |