[njs] Style.

2019-01-30 Thread Dmitry Volyntsev
details:   https://hg.nginx.org/njs/rev/c7e18bd12776
branches:  
changeset: 742:c7e18bd12776
user:  hongzhidao 
date:  Tue Jan 29 01:30:04 2019 +0800
description:
Style.

diffstat:

 njs/njs_lexer_keyword.c |  8 
 njs/njs_module.h|  6 --
 njs/njs_parser.c|  2 +-
 3 files changed, 9 insertions(+), 7 deletions(-)

diffs (53 lines):

diff -r 348a34597bab -r c7e18bd12776 njs/njs_lexer_keyword.c
--- a/njs/njs_lexer_keyword.c   Tue Jan 29 18:15:03 2019 +0300
+++ b/njs/njs_lexer_keyword.c   Tue Jan 29 01:30:04 2019 +0800
@@ -88,10 +88,10 @@ static const njs_keyword_t  njs_keywords
 { nxt_string("encodeURIComponent"),  NJS_TOKEN_ENCODE_URI_COMPONENT, 0 },
 { nxt_string("decodeURI"), NJS_TOKEN_DECODE_URI, 0 },
 { nxt_string("decodeURIComponent"),  NJS_TOKEN_DECODE_URI_COMPONENT, 0 },
-{ nxt_string("require"),  NJS_TOKEN_REQUIRE, 0 },
-{ nxt_string("setTimeout"),   NJS_TOKEN_SET_TIMEOUT, 0 },
-{ nxt_string("setImmediate"), NJS_TOKEN_SET_IMMEDIATE, 0 },
-{ nxt_string("clearTimeout"), NJS_TOKEN_CLEAR_TIMEOUT, 0 },
+{ nxt_string("require"),   NJS_TOKEN_REQUIRE, 0 },
+{ nxt_string("setTimeout"),NJS_TOKEN_SET_TIMEOUT, 0 },
+{ nxt_string("setImmediate"),  NJS_TOKEN_SET_IMMEDIATE, 0 },
+{ nxt_string("clearTimeout"),  NJS_TOKEN_CLEAR_TIMEOUT, 0 },
 
 /* Reserved words. */
 
diff -r 348a34597bab -r c7e18bd12776 njs/njs_module.h
--- a/njs/njs_module.h  Tue Jan 29 18:15:03 2019 +0300
+++ b/njs/njs_module.h  Tue Jan 29 01:30:04 2019 +0800
@@ -7,6 +7,7 @@
 #ifndef _NJS_MODULE_H_INCLUDED_
 #define _NJS_MODULE_H_INCLUDED_
 
+
 typedef struct {
 nxt_str_t   name;
 njs_object_tobject;
@@ -16,8 +17,9 @@ typedef struct {
 njs_ret_t njs_module_require(njs_vm_t *vm, njs_value_t *args,
 nxt_uint_t nargs, njs_index_t unused);
 
-extern const nxt_lvlhsh_proto_t  njs_modules_hash_proto;
 
-extern const njs_object_init_t  njs_require_function_init;
+extern const nxt_lvlhsh_proto_t  njs_modules_hash_proto;
+extern const njs_object_init_t   njs_require_function_init;
+
 
 #endif /* _NJS_MODULE_H_INCLUDED_ */
diff -r 348a34597bab -r c7e18bd12776 njs/njs_parser.c
--- a/njs/njs_parser.c  Tue Jan 29 18:15:03 2019 +0300
+++ b/njs/njs_parser.c  Tue Jan 29 01:30:04 2019 +0800
@@ -720,7 +720,7 @@ njs_parser_function_lambda(njs_vm_t *vm,
 }
 }
 
-token =  njs_parser_token(parser);
+token = njs_parser_token(parser);
 if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
 return token;
 }
___
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel


[njs] Fixed SyntaxError message for unterminated regexp token.

2019-01-30 Thread Dmitry Volyntsev
details:   https://hg.nginx.org/njs/rev/d99f8ee4255c
branches:  
changeset: 745:d99f8ee4255c
user:  Dmitry Volyntsev 
date:  Wed Jan 30 18:49:16 2019 +0300
description:
Fixed SyntaxError message for unterminated regexp token.

diffstat:

 njs/njs_regexp.c |  2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diffs (12 lines):

diff -r e136756f6bb2 -r d99f8ee4255c njs/njs_regexp.c
--- a/njs/njs_regexp.c  Wed Jan 30 18:48:23 2019 +0300
+++ b/njs/njs_regexp.c  Wed Jan 30 18:49:16 2019 +0300
@@ -184,7 +184,7 @@ njs_regexp_literal(njs_vm_t *vm, njs_par
 }
 
 njs_parser_syntax_error(vm, parser, "Unterminated RegExp \"%.*s\"",
-p - lexer->start - 1, lexer->start - 1);
+p - (lexer->start - 1), lexer->start - 1);
 
 return NJS_TOKEN_ILLEGAL;
 }
___
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel


[njs] Fixed lexer->text state for the last token.

2019-01-30 Thread Dmitry Volyntsev
details:   https://hg.nginx.org/njs/rev/e136756f6bb2
branches:  
changeset: 744:e136756f6bb2
user:  Dmitry Volyntsev 
date:  Wed Jan 30 18:48:23 2019 +0300
description:
Fixed lexer->text state for the last token.

diffstat:

 njs/njs_lexer.c |  2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diffs (12 lines):

diff -r ea483ef4631a -r e136756f6bb2 njs/njs_lexer.c
--- a/njs/njs_lexer.c   Wed Jan 30 18:47:59 2019 +0300
+++ b/njs/njs_lexer.c   Wed Jan 30 18:48:23 2019 +0300
@@ -450,6 +450,8 @@ njs_lexer_next_token(njs_lexer_t *lexer)
 return njs_lexer_multi(lexer, token, n, multi);
 }
 
+lexer->text.length = lexer->start - lexer->text.start;
+
 return NJS_TOKEN_END;
 }
 
___
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel


[njs] Replacing vsprintf with nxt_vsprintf in exceptions.

2019-01-30 Thread Dmitry Volyntsev
details:   https://hg.nginx.org/njs/rev/dbffb3031c77
branches:  
changeset: 746:dbffb3031c77
user:  Dmitry Volyntsev 
date:  Wed Jan 30 18:49:33 2019 +0300
description:
Replacing vsprintf with nxt_vsprintf in exceptions.

diffstat:

 njs/njs_crypto.c|   6 +---
 njs/njs_error.c |   6 +++-
 njs/njs_fs.c|  24 +++--
 njs/njs_generator.c |   7 ++---
 njs/njs_json.c  |   2 +-
 njs/njs_module.c|   3 +-
 njs/njs_object.c|   7 ++---
 njs/njs_parser.c|  57 +---
 njs/njs_regexp.c|   9 +++
 njs/njs_string.c|   5 +--
 njs/njs_variable.c  |   3 +-
 njs/njs_vm.c|  18 ++--
 12 files changed, 59 insertions(+), 88 deletions(-)

diffs (465 lines):

diff -r d99f8ee4255c -r dbffb3031c77 njs/njs_crypto.c
--- a/njs/njs_crypto.c  Wed Jan 30 18:49:16 2019 +0300
+++ b/njs/njs_crypto.c  Wed Jan 30 18:49:33 2019 +0300
@@ -691,8 +691,7 @@ njs_crypto_alg(njs_vm_t *vm, const nxt_s
 }
 }
 
-njs_type_error(vm, "not supported algorithm: '%.*s'",
-   (int) name->length, name->start);
+njs_type_error(vm, "not supported algorithm: '%V'", name);
 
 return NULL;
 }
@@ -709,8 +708,7 @@ njs_crypto_encoding(njs_vm_t *vm, const 
 }
 }
 
-njs_type_error(vm, "Unknown digest encoding: '%.*s'",
-   (int) name->length, name->start);
+njs_type_error(vm, "Unknown digest encoding: '%V'", name);
 
 return NULL;
 }
diff -r d99f8ee4255c -r dbffb3031c77 njs/njs_error.c
--- a/njs/njs_error.c   Wed Jan 30 18:49:16 2019 +0300
+++ b/njs/njs_error.c   Wed Jan 30 18:49:33 2019 +0300
@@ -23,13 +23,15 @@ njs_exception_error_create(njs_vm_t *vm,
 nxt_int_t ret;
 njs_value_t   string;
 njs_object_t  *error;
-char  buf[256];
+u_charbuf[256], *p;
 
 if (fmt != NULL) {
 va_start(args, fmt);
-size = vsnprintf(buf, sizeof(buf), fmt, args);
+p = nxt_vsprintf(buf, buf + sizeof(buf), fmt, args);
 va_end(args);
 
+size = p - buf;
+
 } else {
 size = 0;
 }
diff -r d99f8ee4255c -r dbffb3031c77 njs/njs_fs.c
--- a/njs/njs_fs.c  Wed Jan 30 18:49:16 2019 +0300
+++ b/njs/njs_fs.c  Wed Jan 30 18:49:33 2019 +0300
@@ -165,8 +165,7 @@ njs_fs_read_file(njs_vm_t *vm, njs_value
 
 flags = njs_fs_flags(&flag);
 if (nxt_slow_path(flags == -1)) {
-njs_type_error(vm, "Unknown file open flags: '%.*s'",
-   (int) flag.length, flag.start);
+njs_type_error(vm, "Unknown file open flags: '%V'", &flag);
 return NJS_ERROR;
 }
 
@@ -178,8 +177,7 @@ njs_fs_read_file(njs_vm_t *vm, njs_value
 if (encoding.length != 0
 && (encoding.length != 4 || memcmp(encoding.start, "utf8", 4) != 0))
 {
-njs_type_error(vm, "Unknown encoding: '%.*s'",
-   (int) encoding.length, encoding.start);
+njs_type_error(vm, "Unknown encoding: '%V'", &encoding);
 return NJS_ERROR;
 }
 
@@ -362,8 +360,7 @@ njs_fs_read_file_sync(njs_vm_t *vm, njs_
 
 flags = njs_fs_flags(&flag);
 if (nxt_slow_path(flags == -1)) {
-njs_type_error(vm, "Unknown file open flags: '%.*s'",
-   (int) flag.length, flag.start);
+njs_type_error(vm, "Unknown file open flags: '%V'", &flag);
 return NJS_ERROR;
 }
 
@@ -375,8 +372,7 @@ njs_fs_read_file_sync(njs_vm_t *vm, njs_
 if (encoding.length != 0
 && (encoding.length != 4 || memcmp(encoding.start, "utf8", 4) != 0))
 {
-njs_type_error(vm, "Unknown encoding: '%.*s'",
-   (int) encoding.length, encoding.start);
+njs_type_error(vm, "Unknown encoding: '%V'", &encoding);
 return NJS_ERROR;
 }
 
@@ -611,8 +607,7 @@ static njs_ret_t njs_fs_write_file_inter
 if (flag.start != NULL) {
 flags = njs_fs_flags(&flag);
 if (nxt_slow_path(flags == -1)) {
-njs_type_error(vm, "Unknown file open flags: '%.*s'",
-   (int) flag.length, flag.start);
+njs_type_error(vm, "Unknown file open flags: '%V'", &flag);
 return NJS_ERROR;
 }
 
@@ -635,8 +630,7 @@ static njs_ret_t njs_fs_write_file_inter
 if (encoding.length != 0
 && (encoding.length != 4 || memcmp(encoding.start, "utf8", 4) != 0))
 {
-njs_type_error(vm, "Unknown encoding: '%.*s'",
-   (int) encoding.length, encoding.start);
+njs_type_error(vm, "Unknown encoding: '%V'", &encoding);
 return NJS_ERROR;
 }
 
@@ -785,8 +779,7 @@ njs_fs_write_file_sync_internal(njs_vm_t
 if (flag.start != NULL) {
 flags = njs_fs_flags(&flag);
 if (nxt_slow_path(flags == -1)) {
-njs_type_error(vm, "Unknown file open flags: '%.*s'",
-   (int) flag.length, flag.start);
+njs_type_error(vm, "Unknown file open flags: '%V'", &flag);
 

[njs] Imported nxt_sprintf.c.

2019-01-30 Thread Dmitry Volyntsev
details:   https://hg.nginx.org/njs/rev/ea483ef4631a
branches:  
changeset: 743:ea483ef4631a
user:  Dmitry Volyntsev 
date:  Wed Jan 30 18:47:59 2019 +0300
description:
Imported nxt_sprintf.c.

diffstat:

 Makefile  |2 +
 njs/njs_core.h|1 +
 nxt/Makefile  |   13 +
 nxt/nxt_sprintf.c |  587 ++
 nxt/nxt_sprintf.h |   16 +
 nxt/nxt_stub.h|2 -
 nxt/nxt_types.h   |   19 +
 7 files changed, 638 insertions(+), 2 deletions(-)

diffs (723 lines):

diff -r c7e18bd12776 -r ea483ef4631a Makefile
--- a/Makefile  Tue Jan 29 01:30:04 2019 +0800
+++ b/Makefile  Wed Jan 30 18:47:59 2019 +0300
@@ -51,6 +51,7 @@ NXT_BUILDDIR =build
$(NXT_BUILDDIR)/nxt_time.o \
$(NXT_BUILDDIR)/nxt_malloc.o \
$(NXT_BUILDDIR)/nxt_mp.o \
+   $(NXT_BUILDDIR)/nxt_sprintf.o \
 
ar -r -c $(NXT_BUILDDIR)/libnjs.a \
$(NXT_BUILDDIR)/njs_shell.o \
@@ -97,6 +98,7 @@ NXT_BUILDDIR =build
$(NXT_BUILDDIR)/nxt_time.o \
$(NXT_BUILDDIR)/nxt_malloc.o \
$(NXT_BUILDDIR)/nxt_mp.o \
+   $(NXT_BUILDDIR)/nxt_sprintf.o \
 
 all:   test lib_test
 
diff -r c7e18bd12776 -r ea483ef4631a njs/njs_core.h
--- a/njs/njs_core.hTue Jan 29 01:30:04 2019 +0800
+++ b/njs/njs_core.hWed Jan 30 18:47:59 2019 +0300
@@ -27,6 +27,7 @@
 #include 
 #include 
 #include 
+#include 
 
 #include 
 #include 
diff -r c7e18bd12776 -r ea483ef4631a nxt/Makefile
--- a/nxt/Makefile  Tue Jan 29 01:30:04 2019 +0800
+++ b/nxt/Makefile  Wed Jan 30 18:47:59 2019 +0300
@@ -22,6 +22,7 @@ NXT_LIB = nxt
$(NXT_BUILDDIR)/nxt_trace.o \
$(NXT_BUILDDIR)/nxt_time.o \
$(NXT_BUILDDIR)/nxt_mp.o \
+   $(NXT_BUILDDIR)/nxt_sprintf.o \
 
ar -r -c $(NXT_BUILDDIR)/libnxt.a \
$(NXT_BUILDDIR)/nxt_diyfp.o \
@@ -41,6 +42,7 @@ NXT_LIB = nxt
$(NXT_BUILDDIR)/nxt_time.o \
$(NXT_BUILDDIR)/nxt_trace.o \
$(NXT_BUILDDIR)/nxt_mp.o \
+   $(NXT_BUILDDIR)/nxt_sprintf.o \
 
 $(NXT_BUILDDIR)/nxt_diyfp.o: \
$(NXT_LIB)/nxt_types.h \
@@ -244,4 +246,15 @@ NXT_LIB =  nxt
-I$(NXT_LIB) \
$(NXT_LIB)/nxt_mp.c
 
+$(NXT_BUILDDIR)/nxt_sprintf.o: \
+   $(NXT_LIB)/nxt_types.h \
+   $(NXT_LIB)/nxt_clang.h \
+   $(NXT_LIB)/nxt_alignment.h \
+   $(NXT_LIB)/nxt_sprintf.h \
+   $(NXT_LIB)/nxt_sprintf.c \
+
+   $(NXT_CC) -c -o $(NXT_BUILDDIR)/nxt_sprintf.o $(NXT_CFLAGS) \
+   -I$(NXT_LIB) \
+   $(NXT_LIB)/nxt_sprintf.c
+
 include $(NXT_LIB)/test/Makefile
diff -r c7e18bd12776 -r ea483ef4631a nxt/nxt_sprintf.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +
+++ b/nxt/nxt_sprintf.c Wed Jan 30 18:47:59 2019 +0300
@@ -0,0 +1,587 @@
+
+/*
+ * Copyright (C) Igor Sysoev
+ * Copyright (C) NGINX, Inc.
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+
+
+/*
+ * Supported formats:
+ *
+ *%[0][width][x][X]Onxt_off_t
+ *%[0][width]T  nxt_time_t
+ *%[0][width][u][x|X]z  ssize_t/size_t
+ *%[0][width][u][x|X]d  int/u_int
+ *%[0][width][u][x|X]l  long
+ *%[0][width|m][u][x|X]inxt_int_t/nxt_uint_t
+ *%[0][width][u][x|X]D  int32_t/uint32_t
+ *%[0][width][u][x|X]L  int64_t/uint64_t
+ *%[0][width][.width]f  double, max valid number fits to %18.15f
+ *
+ *%dint
+ *
+ *%snull-terminated string
+ *%*s   length and string
+ *
+ *%pvoid *
+ *%bnxt_bool_t
+ *%Vnxt_str_t *
+ *%Z'\0'
+ *%n'\n'
+ *%cchar
+ *%%%
+ *
+ *  Reserved:
+ *%tptrdiff_t
+ *%Snull-terminated wchar string
+ *%Cwchar
+ *%[0][width][u][x|X]Q  int128_t/uint128_t
+ */
+
+
+u_char *
+nxt_sprintf(u_char *buf, u_char *end, const char *fmt, ...)
+{
+u_char   *p;
+va_list  args;
+
+va_start(args, fmt);
+p = nxt_vsprintf(buf, end, fmt, args);
+va_end(args);
+
+return p;
+}
+
+
+/*
+ * nxt_sprintf_t is used:
+ *to pass several parameters of nxt_integer() via single pointer
+ *and to store little used variables of nxt_vsprintf().
+ */
+
+typedef struct {
+   u_char*end;
+   const u_char  *hex;
+   uint32_t  width;
+   int32_t   frac_width;
+   uint8_t   max_width;
+   u_charpadding;
+} nxt_sprintf_t;
+
+
+static u_char *nxt_integer(nxt_sprintf_t *spf, u_char *buf, uint64_t ui64);
+static u_char *nxt_number(nxt_sprintf_t *spf, u_char *buf, double n);
+
+
+/* A right way of "f == 0.0". */
+#define  nxt_double_is_zero(f)  (fabs(f) <= FLT_E

[njs] Unifying quotes usage in exceptions.

2019-01-30 Thread Dmitry Volyntsev
details:   https://hg.nginx.org/njs/rev/ac9b1c01a9b0
branches:  
changeset: 747:ac9b1c01a9b0
user:  Dmitry Volyntsev 
date:  Wed Jan 30 18:50:33 2019 +0300
description:
Unifying quotes usage in exceptions.

diffstat:

 njs/njs_crypto.c|   20 ++--
 njs/njs_date.c  |2 +-
 njs/njs_error.c |2 +-
 njs/njs_fs.c|   16 +-
 njs/njs_function.c  |8 +-
 njs/njs_module.c|2 +-
 njs/njs_object.c|8 +-
 njs/njs_regexp.c|6 +-
 njs/njs_string.c|6 +-
 njs/njs_vm.c|   16 +-
 njs/test/njs_expect_test.exp|4 +-
 njs/test/njs_interactive_test.c |   16 +-
 njs/test/njs_unit_test.c|  162 
 13 files changed, 134 insertions(+), 134 deletions(-)

diffs (truncated from 1067 to 1000 lines):

diff -r dbffb3031c77 -r ac9b1c01a9b0 njs/njs_crypto.c
--- a/njs/njs_crypto.c  Wed Jan 30 18:49:33 2019 +0300
+++ b/njs/njs_crypto.c  Wed Jan 30 18:50:33 2019 +0300
@@ -211,12 +211,12 @@ njs_hash_prototype_update(njs_vm_t *vm, 
 }
 
 if (nxt_slow_path(!njs_is_object_value(&args[0]))) {
-njs_type_error(vm, "'this' is not an object_value");
+njs_type_error(vm, "\"this\" is not an object_value");
 return NJS_ERROR;
 }
 
 if (nxt_slow_path(!njs_is_data(&args[0].data.u.object_value->value))) {
-njs_type_error(vm, "value of 'this' is not a data type");
+njs_type_error(vm, "value of \"this\" is not a data type");
 return NJS_ERROR;
 }
 
@@ -257,12 +257,12 @@ njs_hash_prototype_digest(njs_vm_t *vm, 
 }
 
 if (nxt_slow_path(!njs_is_object_value(&args[0]))) {
-njs_type_error(vm, "'this' is not an object_value");
+njs_type_error(vm, "\"this\" is not an object_value");
 return NJS_ERROR;
 }
 
 if (nxt_slow_path(!njs_is_data(&args[0].data.u.object_value->value))) {
-njs_type_error(vm, "value of 'this' is not a data type");
+njs_type_error(vm, "value of \"this\" is not a data type");
 return NJS_ERROR;
 }
 
@@ -470,12 +470,12 @@ njs_hmac_prototype_update(njs_vm_t *vm, 
 }
 
 if (nxt_slow_path(!njs_is_object_value(&args[0]))) {
-njs_type_error(vm, "'this' is not an object_value");
+njs_type_error(vm, "\"this\" is not an object_value");
 return NJS_ERROR;
 }
 
 if (nxt_slow_path(!njs_is_data(&args[0].data.u.object_value->value))) {
-njs_type_error(vm, "value of 'this' is not a data type");
+njs_type_error(vm, "value of \"this\" is not a data type");
 return NJS_ERROR;
 }
 
@@ -516,12 +516,12 @@ njs_hmac_prototype_digest(njs_vm_t *vm, 
 }
 
 if (nxt_slow_path(!njs_is_object_value(&args[0]))) {
-njs_type_error(vm, "'this' is not an object_value");
+njs_type_error(vm, "\"this\" is not an object_value");
 return NJS_ERROR;
 }
 
 if (nxt_slow_path(!njs_is_data(&args[0].data.u.object_value->value))) {
-njs_type_error(vm, "value of 'this' is not a data type");
+njs_type_error(vm, "value of \"this\" is not a data type");
 return NJS_ERROR;
 }
 
@@ -691,7 +691,7 @@ njs_crypto_alg(njs_vm_t *vm, const nxt_s
 }
 }
 
-njs_type_error(vm, "not supported algorithm: '%V'", name);
+njs_type_error(vm, "not supported algorithm: \"%V\"", name);
 
 return NULL;
 }
@@ -708,7 +708,7 @@ njs_crypto_encoding(njs_vm_t *vm, const 
 }
 }
 
-njs_type_error(vm, "Unknown digest encoding: '%V'", name);
+njs_type_error(vm, "Unknown digest encoding: \"%V\"", name);
 
 return NULL;
 }
diff -r dbffb3031c77 -r ac9b1c01a9b0 njs/njs_date.c
--- a/njs/njs_date.cWed Jan 30 18:49:33 2019 +0300
+++ b/njs/njs_date.cWed Jan 30 18:50:33 2019 +0300
@@ -1901,7 +1901,7 @@ njs_date_prototype_to_json(njs_vm_t *vm,
 }
 }
 
-njs_type_error(vm, "'this' argument is not an object");
+njs_type_error(vm, "\"this\" argument is not an object");
 
 return NXT_ERROR;
 }
diff -r dbffb3031c77 -r ac9b1c01a9b0 njs/njs_error.c
--- a/njs/njs_error.c   Wed Jan 30 18:49:33 2019 +0300
+++ b/njs/njs_error.c   Wed Jan 30 18:50:33 2019 +0300
@@ -583,7 +583,7 @@ njs_error_prototype_to_string(njs_vm_t *
 njs_index_t unused)
 {
 if (nargs < 1 || !njs_is_object(&args[0])) {
-njs_type_error(vm, "'this' argument is not an object");
+njs_type_error(vm, "\"this\" argument is not an object");
 return NXT_ERROR;
 }
 
diff -r dbffb3031c77 -r ac9b1c01a9b0 njs/njs_fs.c
--- a/njs/njs_fs.c  Wed Jan 30 18:49:33 2019 +0300
+++ b/njs/njs_fs.c  Wed Jan 30 18:50:33 2019 +0300
@@ -165,7 +165,7 @@ njs_fs_read_file(njs_vm_t *vm, njs_value
 
 flags = njs_fs_flags(&flag);
 if (nxt_slow_path(flags == -1)) {
-njs_type_error(vm, "Unknown file open flags: '%V'", &flag);
+njs_type_error(vm, "Unknown file open