ignore trailing carriage returns in file parser
[project/uci.git] / file.c
diff --git a/file.c b/file.c
index 3cd0133..c69a297 100644 (file)
--- a/file.c
+++ b/file.c
@@ -60,7 +60,10 @@ __private void uci_getln(struct uci_context *ctx, int offset)
                ofs += strlen(p);
                if (pctx->buf[ofs - 1] == '\n') {
                        pctx->line++;
-                       pctx->buf[ofs - 1] = 0;
+                       if (ofs >= 2 && pctx->buf[ofs - 2] == '\r')
+                               pctx->buf[ofs - 2] = 0;
+                       else
+                               pctx->buf[ofs - 1] = 0;
                        return;
                }
 
@@ -561,10 +564,10 @@ static void uci_export_package(struct uci_package *p, FILE *stream, bool header)
        struct uci_element *s, *o, *i;
 
        if (header)
-               fprintf(stream, "package '%s'\n", uci_escape(ctx, p->e.name));
+               fprintf(stream, "package %s\n", uci_escape(ctx, p->e.name));
        uci_foreach_element(&p->sections, s) {
                struct uci_section *sec = uci_to_section(s);
-               fprintf(stream, "\nconfig '%s'", uci_escape(ctx, sec->type));
+               fprintf(stream, "\nconfig %s", uci_escape(ctx, sec->type));
                if (!sec->anonymous || (ctx->flags & UCI_FLAG_EXPORT_NAME))
                        fprintf(stream, " '%s'", uci_escape(ctx, sec->e.name));
                fprintf(stream, "\n");
@@ -572,12 +575,12 @@ static void uci_export_package(struct uci_package *p, FILE *stream, bool header)
                        struct uci_option *opt = uci_to_option(o);
                        switch(opt->type) {
                        case UCI_TYPE_STRING:
-                               fprintf(stream, "\toption '%s'", uci_escape(ctx, opt->e.name));
+                               fprintf(stream, "\toption %s", uci_escape(ctx, opt->e.name));
                                fprintf(stream, " '%s'\n", uci_escape(ctx, opt->v.string));
                                break;
                        case UCI_TYPE_LIST:
                                uci_foreach_element(&opt->v.list, i) {
-                                       fprintf(stream, "\tlist '%s'", uci_escape(ctx, opt->e.name));
+                                       fprintf(stream, "\tlist %s", uci_escape(ctx, opt->e.name));
                                        fprintf(stream, " '%s'\n", uci_escape(ctx, i->name));
                                }
                                break;