#ifndef _SYS_RESOURCE_H
#define _SYS_RESOURCE_H 1

// https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_resource.h.html

#include <sys/cdefs.h>

__BEGIN_DECLS

#define __need_id_t
#include <sys/types.h>

#include <sys/time.h>

#define PRIO_PROCESS	0
#define PRIO_PGRP		1
#define PRIO_USER		2

typedef unsigned int rlim_t;

#define RLIM_INFINITY	((rlim_t)-1)
#define RLIM_SAVED_MAX	RLIM_INFINITY
#define RLIM_SAVED_CUR	RLIM_INFINITY

#define RUSAGE_SELF		0
#define RUSAGE_CHILDREN 1

struct rlimit
{
	rlim_t rlim_cur;	/* The current (soft) limit. */
	rlim_t rlim_max;	/* The hard limit. */
};

struct rusage
{
	struct timeval ru_utime;	/* User time used. */
	struct timeval ru_stime;	/* System time used. */	
};

#define RLIMIT_CORE		0
#define RLIMIT_CPU		1
#define RLIMIT_DATA		2
#define RLIMIT_FSIZE	3
#define RLIMIT_NOFILE	4
#define RLIMIT_STACK	5
#define RLIMIT_AS		6

int getpriority(int which, id_t who);
int getrlimit(int resource, struct rlimit* rlp);
int getrusage(int who, struct rusage* r_usage);
int setpriority(int which, id_t who, int value);
int setrlimit(int resource, const struct rlimit* rlp);

__END_DECLS

#endif