home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************************
- *
- * $Source: /unixb/home/unixlib/source/unixlib37/src/resource/c/RCS/setprior,v $
- * $Date: 1996/05/06 09:03:13 $
- * $Revision: 1.2 $
- * $State: Rel $
- * $Author: unixlib $
- *
- * $Log: setprior,v $
- * Revision 1.2 1996/05/06 09:03:13 unixlib
- * Updates to sources made by Nick Burrett, Peter Burwood and Simon Callan.
- * Saved for 3.7a release.
- *
- * Revision 1.1 1996/04/19 21:29:28 simon
- * Initial revision
- *
- ***************************************************************************/
-
- static const char rcs_id[] = "$Id: setprior,v 1.2 1996/05/06 09:03:13 unixlib Rel $";
-
- #include <errno.h>
- #include <sys/resource.h>
- #include <sys/unix.h>
- #include <limits.h>
-
- /* A return value of zero indicates success. */
-
- int
- setpriority (enum __priority_which which, int who, int prio)
- {
- int i;
-
- if (who == 0)
- {
- /* Set the priority of the current process. */
- switch (which)
- {
- case PRIO_PROCESS:
- __u->ppri = (prio > PRIO_MAX) ? PRIO_MAX
- : (prio < PRIO_MIN) ? PRIO_MIN : prio;
- return 0;
- break;
- case PRIO_PGRP:
- __u->gpri = (prio > PRIO_MAX) ? PRIO_MAX
- : (prio < PRIO_MIN) ? PRIO_MIN : prio;
- return 0;
- break;
- case PRIO_USER:
- __u->upri = (prio > PRIO_MAX) ? PRIO_MAX
- : (prio < PRIO_MIN) ? PRIO_MIN : prio;
- return 0;
- break;
- default:
- errno = EINVAL;
- return -1;
- }
- return -1;
- }
-
- for (i = 0; i < CHILD_MAX; i++)
- {
- switch (which)
- {
- case PRIO_PROCESS:
- if (__u->child[i].pid == who)
- {
- if (__u->child[i].gpri > prio)
- {
- errno = EACCES;
- return -1;
- }
- __u->child[i].ppri = (prio > PRIO_MAX) ? PRIO_MAX
- : (prio < PRIO_MIN) ? PRIO_MIN : prio;
- return 0;
- }
- break;
- case PRIO_PGRP:
- if (__u->child[i].gid == who)
- {
- if (__u->child[i].gpri > prio)
- {
- errno = EACCES;
- return -1;
- }
- __u->child[i].gpri = (prio > PRIO_MAX) ? PRIO_MAX
- : (prio < PRIO_MIN) ? PRIO_MIN : prio;
- return 0;
- }
- break;
- case PRIO_USER:
- if (__u->child[i].uid == who)
- {
- if (__u->child[i].upri > prio)
- {
- errno = EACCES;
- return -1;
- }
- __u->child[i].upri = (prio > PRIO_MAX) ? PRIO_MAX
- : (prio < PRIO_MIN) ? PRIO_MIN : prio;
- return 0;
- }
- break;
- default:
- errno = EINVAL;
- return -1;
- }
- }
- /* Value of 'which' was invalid. */
- errno = ESRCH;
- return -1;
- }
-