chiark / gitweb /
Source code reorganization:
[disorder] / lib / queue-rights.c
CommitLineData
938d8157 1/*
2 * This file is part of DisOrder.
3 * Copyright (C) 2007 Richard Kettlewell
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
18 * USA
19 */
20/** @file lib/queue-rights.c
21 * @brief Various rights-checking operations
22 */
23
05b75f8d 24#include "common.h"
938d8157 25
26#include "queue.h"
27#include "rights.h"
28
29/** @brief Test for scratchability
30 * @param rights User rights
31 * @param who Username
32 * @param q Queue entry or NULL
33 * @return non-0 if scratchable, else 0
34 */
35int right_scratchable(rights_type rights, const char *who,
36 const struct queue_entry *q) {
37 rights_type r;
38
39 if(!q)
40 return 0;
41 if(q->submitter)
42 if(!strcmp(q->submitter, who))
43 r = RIGHT_SCRATCH_MINE|RIGHT_SCRATCH_ANY;
44 else
45 r = RIGHT_SCRATCH_ANY;
46 else
47 r = RIGHT_SCRATCH_RANDOM|RIGHT_SCRATCH_ANY;
48 return !!(rights & r);
49}
50
51/** @brief Test for movability
52 * @param rights User rights
53 * @param who Username
54 * @param q Queue entry or NULL
55 * @return non-0 if movable, else 0
56 */
57int right_movable(rights_type rights, const char *who,
58 const struct queue_entry *q) {
59 rights_type r;
60
61 if(!q)
62 return 0;
63 if(q->submitter)
64 if(!strcmp(q->submitter, who))
65 r = RIGHT_MOVE_MINE|RIGHT_MOVE_ANY;
66 else
67 r = RIGHT_MOVE_ANY;
68 else
69 r = RIGHT_MOVE_RANDOM|RIGHT_MOVE_ANY;
70 return !!(rights & r);
71}
72
73/** @brief Test for removability
74 * @param rights User rights
75 * @param who Username
76 * @param q Queue entry or NULL
77 * @return non-0 if removable, else 0
78 */
79int right_removable(rights_type rights, const char *who,
80 const struct queue_entry *q) {
81 rights_type r;
82
83 if(!q)
84 return 0;
85 if(q->submitter)
86 if(!strcmp(q->submitter, who))
87 r = RIGHT_REMOVE_MINE|RIGHT_REMOVE_ANY;
88 else
89 r = RIGHT_REMOVE_ANY;
90 else
91 r = RIGHT_REMOVE_RANDOM|RIGHT_REMOVE_ANY;
92 return !!(rights & r);
93}
94
95/*
96Local Variables:
97c-basic-offset:2
98comment-column:40
99fill-column:79
100indent-tabs-mode:nil
101End:
102*/