- char *token, *copy, *delims;
- int group;
-
- delims = "+:";
- group = 0;
- copy = strdup(syms);
- token = strtok(copy, delims);
- while (token != NULL && group <= groupNum) {
- /* Ignore :2,:3,:4 which represent additional layout
- * groups
- */
- if (IsLayoutOrVariant(token)
- && !(strlen(token) == 1 && isdigit(token[0]))) {
- strncpy (layout, token, LAYOUT_MAX);
- group++;
+ char *tok, *layout;
+ int grp;
+
+ layout = NULL;
+ tok = strtok(syms, "+:");
+ for (grp = 0; tok && grp <= grp_num; tok = strtok(NULL, "+:")) {
+ if (!valid_layout_or_variant(tok)) {
+ continue;
+ } else if (strlen(tok) == 1 && isdigit(tok[0])) {
+ /* ignore :2, :3, :4 (additional layout groups) */
+ continue;