yang parser CHANGE rename get_string() to get_argument()

The new name is more pregnant for what it actually does.
diff --git a/src/parser_yang.c b/src/parser_yang.c
index bd01ac9..ec5200a 100644
--- a/src/parser_yang.c
+++ b/src/parser_yang.c
@@ -506,7 +506,7 @@
                 break;
             default:
                 /* it must be quoted again */
-                LOGVAL_YANG(ctx, LYVE_SYNTAX_YANG, "Both string parts divided by '+' must be quoted.\n");
+                LOGVAL_YANG(ctx, LYVE_SYNTAX_YANG, "Both string parts divided by '+' must be quoted.");
                 return LY_EVALID;
             }
             MOVE_INPUT(ctx, data, 1);
@@ -534,7 +534,7 @@
  * @return LY_ERR values.
  */
 static LY_ERR
-get_string(struct ly_parser_ctx *ctx, const char **data, enum yang_arg arg, char **word_p, char **word_b, size_t *word_len)
+get_argument(struct ly_parser_ctx *ctx, const char **data, enum yang_arg arg, char **word_p, char **word_b, size_t *word_len)
 {
     size_t buf_len = 0;
     LY_ERR ret;
@@ -551,8 +551,10 @@
         case '\'':
         case '\"':
             if (*word_len) {
-                /* we want strings always in a separate word, leave it */
-                goto str_end;
+                /* invalid - quotes cannot be in unquoted string and only optsep, ; or { can follow it */
+                LOGVAL_YANG(ctx, LY_VCODE_INSTREXP, 1, *data,
+                            "unquoted string character, optsep, semicolon or opening brace");
+                return LY_EVALID;
             }
             ret = read_qstring(ctx, data, arg, word_p, word_b, word_len, &buf_len);
             LY_CHECK_RET(ret);
@@ -568,7 +570,6 @@
                 ret = skip_comment(ctx, data, 2);
             } else {
                 /* not a comment after all */
-                --data;
                 ret = buf_store_char(ctx, data, arg, word_p, word_len, word_b, &buf_len, 0);
             }
             LY_CHECK_RET(ret);
@@ -612,6 +613,11 @@
 
             LOGVAL_YANG(ctx, LY_VCODE_INSTREXP, 1, *data, "an argument");
             return LY_EVALID;
+        case '}':
+            /* invalid - braces cannot be in unquoted string (opening braces terminates the string and can follow it) */
+            LOGVAL_YANG(ctx, LY_VCODE_INSTREXP, 1, *data,
+                        "unquoted string character, optsep, semicolon or opening brace");
+            return LY_EVALID;
         default:
             LY_CHECK_RET(buf_store_char(ctx, data, arg, word_p, word_len, word_b, &buf_len, 0));
             break;
@@ -968,7 +974,7 @@
     stmt->stmt = lydict_insert(ctx->ctx, word, word_len);
 
     /* get optional argument */
-    ret = get_string(ctx, data, Y_MAYBE_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_MAYBE_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     if (word) {
@@ -1029,7 +1035,7 @@
     e->insubstmt_index = insubstmt_index;
 
     /* get optional argument */
-    ret = get_string(ctx, data, Y_MAYBE_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_MAYBE_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     if (word) {
@@ -1076,7 +1082,7 @@
     }
 
     /* get value */
-    ret = get_string(ctx, data, arg, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, arg, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     /* store value and spend buf if allocated */
@@ -1123,7 +1129,7 @@
     }
 
     /* get value */
-    ret = get_string(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     if ((word_len == 3) && !strncmp(word, "1.0", word_len)) {
@@ -1180,7 +1186,7 @@
     }
 
     /* get value */
-    ret = get_string(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, *belongsto, word, word_len);
@@ -1235,7 +1241,7 @@
     }
 
     /* get value */
-    ret = get_string(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     /* check value */
@@ -1287,7 +1293,7 @@
     LYSP_ARRAY_NEW_RET(ctx, includes, inc, LY_EMEM);
 
     /* get value */
-    ret = get_string(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, inc->name, word, word_len);
@@ -1339,7 +1345,7 @@
     LYSP_ARRAY_NEW_RET(ctx, imports, imp, LY_EVALID);
 
     /* get value */
-    ret = get_string(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, imp->name, word, word_len);
@@ -1400,7 +1406,7 @@
     LYSP_ARRAY_NEW_RET(ctx, revs, rev, LY_EMEM);
 
     /* get value */
-    ret = get_string(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     /* check value */
@@ -1462,7 +1468,7 @@
     LY_CHECK_ERR_RET(!*texts, LOGMEM(ctx->ctx), LY_EMEM);
 
     /* get value */
-    ret = get_string(ctx, data, arg, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, arg, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, (*texts)[count - 1], word, word_len);
@@ -1508,7 +1514,7 @@
     }
 
     /* get value */
-    ret = get_string(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     if ((word_len == 4) && !strncmp(word, "true", word_len)) {
@@ -1564,7 +1570,7 @@
     }
 
     /* get value */
-    ret = get_string(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     if ((word_len == 4) && !strncmp(word, "true", word_len)) {
@@ -1615,7 +1621,7 @@
     enum yang_keyword kw;
 
     /* get value */
-    ret = get_string(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, restr->arg, word, word_len);
@@ -1693,7 +1699,7 @@
     }
 
     /* get value */
-    ret = get_string(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     if ((word_len == 7) && !strncmp(word, "current", word_len)) {
@@ -1755,7 +1761,7 @@
     *when_p = when;
 
     /* get value */
-    ret = get_string(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, when->cond, word, word_len);
@@ -1816,7 +1822,7 @@
     }
 
     /* get name */
-    ret = get_string(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, any->name, word, word_len);
@@ -1895,7 +1901,7 @@
     *flags |= LYS_SET_VALUE;
 
     /* get value */
-    ret = get_string(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     if (!word_len || (word[0] == '+') || ((word[0] == '0') && (word_len > 1)) || ((val_kw == YANG_VALUE) && !strncmp(word, "-0", 2))) {
@@ -1968,7 +1974,7 @@
     LYSP_ARRAY_NEW_RET(ctx, enums, enm, LY_EMEM);
 
     /* get value */
-    ret = get_string(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, enm->name, word, word_len);
@@ -2031,7 +2037,7 @@
     }
 
     /* get value */
-    ret = get_string(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     if (!word_len || (word[0] == '0') || !isdigit(word[0])) {
@@ -2101,7 +2107,7 @@
     *flags |= LYS_SET_REQINST;
 
     /* get value */
-    ret = get_string(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     if ((word_len == 4) && !strncmp(word, "true", word_len)) {
@@ -2155,7 +2161,7 @@
     }
 
     /* get value */
-    ret = get_string(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     if ((word_len != 12) || strncmp(word, "invert-match", word_len)) {
@@ -2214,7 +2220,7 @@
     LYSP_ARRAY_NEW_RET(ctx, patterns, restr, LY_EMEM);
 
     /* get value */
-    ret = get_string(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     /* add special meaning first byte */
@@ -2286,7 +2292,7 @@
     }
 
     /* get value */
-    ret = get_string(ctx, data, Y_PREF_IDENTIF_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_PREF_IDENTIF_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, type->name, word, word_len);
@@ -2388,7 +2394,7 @@
     }
 
     /* get name */
-    ret = get_string(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, leaf->name, word, word_len);
@@ -2478,7 +2484,7 @@
     *flags |= LYS_SET_MAX;
 
     /* get value */
-    ret = get_string(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     if (!word_len || (word[0] == '0') || ((word[0] != 'u') && !isdigit(word[0]))) {
@@ -2551,7 +2557,7 @@
     *flags |= LYS_SET_MIN;
 
     /* get value */
-    ret = get_string(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     if (!word_len || !isdigit(word[0]) || ((word[0] == '0') && (word_len > 1))) {
@@ -2618,7 +2624,7 @@
     }
 
     /* get value */
-    ret = get_string(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     if ((word_len == 6) && !strncmp(word, "system", word_len)) {
@@ -2683,7 +2689,7 @@
     }
 
     /* get name */
-    ret = get_string(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, llist->name, word, word_len);
@@ -2773,7 +2779,7 @@
     LYSP_ARRAY_NEW_RET(ctx, refines, rf, LY_EMEM);
 
     /* get value */
-    ret = get_string(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, rf->nodeid, word, word_len);
@@ -2846,7 +2852,7 @@
     LYSP_ARRAY_NEW_RET(ctx, typedefs, tpdf, LY_EMEM);
 
     /* get value */
-    ret = get_string(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, tpdf->name, word, word_len);
@@ -2993,7 +2999,7 @@
     LYSP_ARRAY_NEW_RET(ctx, actions, act, LY_EMEM);
 
     /* get value */
-    ret = get_string(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, act->name, word, word_len);
@@ -3062,7 +3068,7 @@
     LYSP_ARRAY_NEW_RET(ctx, notifs, notif, LY_EMEM);
 
     /* get value */
-    ret = get_string(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, notif->name, word, word_len);
@@ -3150,7 +3156,7 @@
     LYSP_ARRAY_NEW_RET(ctx, groupings, grp, LY_EMEM);
 
     /* get value */
-    ret = get_string(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, grp->name, word, word_len);
@@ -3239,7 +3245,7 @@
     LYSP_ARRAY_NEW_RET(ctx, augments, aug, LY_EMEM);
 
     /* get value */
-    ret = get_string(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, aug->nodeid, word, word_len);
@@ -3342,7 +3348,7 @@
     }
 
     /* get name */
-    ret = get_string(ctx, data, Y_PREF_IDENTIF_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_PREF_IDENTIF_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, uses->name, word, word_len);
@@ -3421,7 +3427,7 @@
     }
 
     /* get name */
-    ret = get_string(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, cas->name, word, word_len);
@@ -3516,7 +3522,7 @@
     }
 
     /* get name */
-    ret = get_string(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, choice->name, word, word_len);
@@ -3620,7 +3626,7 @@
     }
 
     /* get name */
-    ret = get_string(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, cont->name, word, word_len);
@@ -3737,7 +3743,7 @@
     }
 
     /* get name */
-    ret = get_string(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, list->name, word, word_len);
@@ -3857,7 +3863,7 @@
     }
 
     /* get value */
-    ret = get_string(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     if ((word_len == 4) && !strncmp(word, "true", word_len)) {
@@ -3914,7 +3920,7 @@
     }
 
     /* get value */
-    ret = get_string(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, *argument, word, word_len);
@@ -3960,7 +3966,7 @@
     LYSP_ARRAY_NEW_RET(ctx, extensions, ex, LY_EMEM);
 
     /* get value */
-    ret = get_string(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, ex->name, word, word_len);
@@ -4020,7 +4026,7 @@
     uint32_t *d_min, *d_max;
 
     /* get value */
-    ret = get_string(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     if ((word_len == 13) && !strncmp(word, "not-supported", word_len)) {
@@ -4231,7 +4237,7 @@
     LYSP_ARRAY_NEW_RET(ctx, deviations, dev, LY_EMEM);
 
     /* get value */
-    ret = get_string(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, dev->nodeid, word, word_len);
@@ -4289,7 +4295,7 @@
     LYSP_ARRAY_NEW_RET(ctx, features, feat, LY_EMEM);
 
     /* get value */
-    ret = get_string(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, feat->name, word, word_len);
@@ -4344,7 +4350,7 @@
     LYSP_ARRAY_NEW_RET(ctx, identities, ident, LY_EMEM);
 
     /* get value */
-    ret = get_string(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, ident->name, word, word_len);
@@ -4400,7 +4406,7 @@
     enum yang_module_stmt mod_stmt = Y_MOD_MODULE_HEADER;
 
     /* (sub)module name */
-    ret = get_string(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
+    ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
     LY_CHECK_RET(ret);
 
     INSERT_WORD(ctx, buf, mod->name, word, word_len);
@@ -4627,7 +4633,7 @@
     LY_CHECK_GOTO(ret, error);
 
     if ((kw != YANG_MODULE) && (kw != YANG_SUBMODULE)) {
-        LOGVAL_YANG(&context, LYVE_SYNTAX, "Invalid keyword \"%s\", expected \"module\" or \"submodule\".\n",
+        LOGVAL_YANG(&context, LYVE_SYNTAX, "Invalid keyword \"%s\", expected \"module\" or \"submodule\".",
                ly_stmt2str(kw));
         goto error;
     }
@@ -4643,7 +4649,7 @@
     LY_CHECK_GOTO(ret, error);
 
     /* read some trailing spaces or new lines */
-    ret = get_string(&context, &data, Y_MAYBE_STR_ARG, &word, &buf, &word_len);
+    ret = get_argument(&context, &data, Y_MAYBE_STR_ARG, &word, &buf, &word_len);
     LY_CHECK_GOTO(ret, error);
 
     if (word) {