From 8df88d505542d5e4bbc31a94a96cb2d57baa3165 Mon Sep 17 00:00:00 2001 From: Moe Jette <jette1@llnl.gov> Date: Wed, 29 Oct 2003 22:26:44 +0000 Subject: [PATCH] Add support for sorting job info by GID or Group name. --- src/squeue/sort.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/squeue/sort.c b/src/squeue/sort.c index 16fffe9d209..1f445d04f30 100644 --- a/src/squeue/sort.c +++ b/src/squeue/sort.c @@ -24,6 +24,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. \*****************************************************************************/ +#include <grp.h> #include <pwd.h> #include <sys/types.h> @@ -36,6 +37,8 @@ static bool reverse_order; +static int _sort_job_by_group_id(void *void1, void *void2); +static int _sort_job_by_group_name(void *void1, void *void2); static int _sort_job_by_id(void *void1, void *void2); static int _sort_job_by_name(void *void1, void *void2); static int _sort_job_by_state(void *void1, void *void2); @@ -91,6 +94,10 @@ void sort_job_list(List job_list) list_sort(job_list, _sort_job_by_time_end); else if (params.sort[i] == 'f') ; /* sort_job_by_featuers */ + else if (params.sort[i] == 'g') + list_sort(job_list, _sort_job_by_group_name); + else if (params.sort[i] == 'G') + list_sort(job_list, _sort_job_by_group_id); else if (params.sort[i] == 'h') ; /* sort_job_by_shared */ else if (params.sort[i] == 'i') @@ -160,6 +167,38 @@ void sort_step_list(List step_list) /***************************************************************************** * Local Job Sort Functions *****************************************************************************/ +static int _sort_job_by_group_id(void *void1, void *void2) +{ + int diff; + job_info_t *job1 = (job_info_t *) void1; + job_info_t *job2 = (job_info_t *) void2; + + diff = job1->group_id - job2->group_id; + + if (reverse_order) + diff = -diff; + return diff; +} + +static int _sort_job_by_group_name(void *void1, void *void2) +{ + int diff; + job_info_t *job1 = (job_info_t *) void1; + job_info_t *job2 = (job_info_t *) void2; + struct group *group_info = NULL; + char *name1 = "", *name2 = ""; + + if ((group_info = getgrgid((gid_t) job1->group_id))) + name1 = group_info->gr_name; + if ((group_info = getgrgid((gid_t) job2->group_id))) + name2 = group_info->gr_name; + diff = strcmp(name1, name2); + + if (reverse_order) + diff = -diff; + return diff; +} + static int _sort_job_by_id(void *void1, void *void2) { int diff; @@ -375,6 +414,7 @@ static int _sort_job_by_priority(void *void1, void *void2) diff = -diff; return diff; } + static int _sort_job_by_user_id(void *void1, void *void2) { int diff; -- GitLab