weston-launch: always run through all groups

If the user is in group 0, we'd exit the loop early with a failure. Make sure
we run through all groups.

https://gitlab.freedesktop.org/wayland/weston/issues/86

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
[Pekka: fix one whitespace]
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
diff --git a/libweston/weston-launch.c b/libweston/weston-launch.c
index 1adcf21..bf73e0d 100644
--- a/libweston/weston-launch.c
+++ b/libweston/weston-launch.c
@@ -121,7 +121,7 @@
 union cmsg_data { unsigned char b[4]; int fd; };
 
 static gid_t *
-read_groups(void)
+read_groups(int *ngroups)
 {
 	int n;
 	gid_t *groups;
@@ -142,6 +142,8 @@
 		free(groups);
 		return NULL;
 	}
+
+	*ngroups = n;
 	return groups;
 }
 
@@ -150,7 +152,7 @@
 {
 	struct group *gr;
 	gid_t *groups;
-	int i;
+	int ngroups;
 #ifdef HAVE_SYSTEMD_LOGIN
 	char *session, *seat;
 	int err;
@@ -161,10 +163,10 @@
 
 	gr = getgrnam("weston-launch");
 	if (gr) {
-		groups = read_groups();
-		if (groups) {
-			for (i = 0; groups[i]; ++i) {
-				if (groups[i] == gr->gr_gid) {
+		groups = read_groups(&ngroups);
+		if (groups && ngroups > 0) {
+			while (ngroups--) {
+				if (groups[ngroups] == gr->gr_gid) {
 					free(groups);
 					return true;
 				}