From 0b952a98f1dafc61e966237947e7836814fb74f5 Mon Sep 17 00:00:00 2001 From: "Luiz Fernando N. Capitulino" Date: Sun, 15 Apr 2007 18:40:31 -0300 Subject: ident.c: Use const qualifier for 'struct passwd' parameters Signed-off-by: Luiz Fernando N. Capitulino Signed-off-by: Junio C Hamano --- ident.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'ident.c') diff --git a/ident.c b/ident.c index bb03bddd34..b557ecd539 100644 --- a/ident.c +++ b/ident.c @@ -9,7 +9,7 @@ static char git_default_date[50]; -static void copy_gecos(struct passwd *w, char *name, int sz) +static void copy_gecos(const struct passwd *w, char *name, int sz) { char *src, *dst; int len, nlen; @@ -43,7 +43,7 @@ static void copy_gecos(struct passwd *w, char *name, int sz) } -static void copy_email(struct passwd *pw) +static void copy_email(const struct passwd *pw) { /* * Make up a fake email address -- cgit v1.2.3 From b0732115342d190d8c547ceaf5bf7a3534e3be5d Mon Sep 17 00:00:00 2001 From: "Luiz Fernando N. Capitulino" Date: Sun, 15 Apr 2007 15:51:29 -0300 Subject: ident.c: Use size_t (instead of int) to store sizes Signed-off-by: Luiz Fernando N. Capitulino Signed-off-by: Junio C Hamano --- ident.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'ident.c') diff --git a/ident.c b/ident.c index b557ecd539..88e7f74e88 100644 --- a/ident.c +++ b/ident.c @@ -9,10 +9,10 @@ static char git_default_date[50]; -static void copy_gecos(const struct passwd *w, char *name, int sz) +static void copy_gecos(const struct passwd *w, char *name, size_t sz) { char *src, *dst; - int len, nlen; + size_t len, nlen; nlen = strlen(w->pw_name); @@ -49,7 +49,7 @@ static void copy_email(const struct passwd *pw) * Make up a fake email address * (name + '@' + hostname [+ '.' + domainname]) */ - int len = strlen(pw->pw_name); + size_t len = strlen(pw->pw_name); if (len > sizeof(git_default_email)/2) die("Your sysadmin must hate you!"); memcpy(git_default_email, pw->pw_name, len); @@ -95,9 +95,9 @@ static void setup_ident(void) datestamp(git_default_date, sizeof(git_default_date)); } -static int add_raw(char *buf, int size, int offset, const char *str) +static int add_raw(char *buf, size_t size, int offset, const char *str) { - int len = strlen(str); + size_t len = strlen(str); if (offset + len > size) return size; memcpy(buf + offset, str, len); @@ -131,9 +131,9 @@ static int crud(unsigned char c) * Copy over a string to the destination, but avoid special * characters ('\n', '<' and '>') and remove crud at the end */ -static int copy(char *buf, int size, int offset, const char *src) +static int copy(char *buf, size_t size, int offset, const char *src) { - int i, len; + size_t i, len; unsigned char c; /* Remove crud from the beginning.. */ -- cgit v1.2.3 From 28a94f885a735e7474357698ec384de24d526620 Mon Sep 17 00:00:00 2001 From: Josh Triplett Date: Sat, 28 Apr 2007 18:40:28 -0700 Subject: Fall back to $EMAIL for missing GIT_AUTHOR_EMAIL and GIT_COMMITTER_EMAIL Some other programs get the user's email address from $EMAIL, so fall back to that if we don't have a Git-specific email address. Signed-off-by: Josh Triplett Signed-off-by: Junio C Hamano --- ident.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'ident.c') diff --git a/ident.c b/ident.c index 88e7f74e88..69a04b827d 100644 --- a/ident.c +++ b/ident.c @@ -195,6 +195,8 @@ const char *fmt_ident(const char *name, const char *email, setup_ident(); if (!name) name = git_default_name; + if (!email) + email = getenv("EMAIL"); if (!email) email = git_default_email; -- cgit v1.2.3 From ec563e8153cba89728a271a26c8a94e7a42d8152 Mon Sep 17 00:00:00 2001 From: Pierre Habouzit Date: Tue, 5 Jun 2007 18:40:41 +0200 Subject: $EMAIL is a last resort fallback, as it's system-wide. $EMAIL is a system-wide setup that is used for many many many applications. If the git user chose a specific user.email setup, then _this_ should be honoured rather than $EMAIL. Signed-off-by: Pierre Habouzit Signed-off-by: Junio C Hamano --- ident.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'ident.c') diff --git a/ident.c b/ident.c index 69a04b827d..3d49608e6f 100644 --- a/ident.c +++ b/ident.c @@ -195,10 +195,10 @@ const char *fmt_ident(const char *name, const char *email, setup_ident(); if (!name) name = git_default_name; - if (!email) - email = getenv("EMAIL"); if (!email) email = git_default_email; + if (!email) + email = getenv("EMAIL"); if (!*name) { struct passwd *pw; -- cgit v1.2.3 From 46f74f007b86452c4b4135f5145f94eefc994ea2 Mon Sep 17 00:00:00 2001 From: Matt Kraai Date: Thu, 5 Jul 2007 17:29:41 -0700 Subject: Prefer EMAIL to username@hostname. The environment variable $EMAIL gives a better default of user's preferred e-mail address than the hardcoded "username@hostname", as it is understood by many existing programs. We still honor GIT_*_EMAIL environment variables and user.email configuration variable give them higher precedence, so that the user can override $EMAIL or "username@hostname", as they are likely to be more specific to the context of working on a particular project. Signed-off-by: Matt Kraai Signed-off-by: Junio C Hamano --- ident.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'ident.c') diff --git a/ident.c b/ident.c index 3d49608e6f..6612d17eba 100644 --- a/ident.c +++ b/ident.c @@ -83,11 +83,18 @@ static void setup_ident(void) } if (!git_default_email[0]) { - if (!pw) - pw = getpwuid(getuid()); - if (!pw) - die("You don't exist. Go away!"); - copy_email(pw); + const char *email = getenv("EMAIL"); + + if (email && email[0]) + strlcpy(git_default_email, email, + sizeof(git_default_email)); + else { + if (!pw) + pw = getpwuid(getuid()); + if (!pw) + die("You don't exist. Go away!"); + copy_email(pw); + } } /* And set the default date */ @@ -197,8 +204,6 @@ const char *fmt_ident(const char *name, const char *email, name = git_default_name; if (!email) email = git_default_email; - if (!email) - email = getenv("EMAIL"); if (!*name) { struct passwd *pw; -- cgit v1.2.3 From 180787c48f21c40a047ae3ee5432821d7e033e44 Mon Sep 17 00:00:00 2001 From: Steffen Prohaska Date: Tue, 14 Aug 2007 00:05:50 +0200 Subject: Improved hint on how to set identity The first thing we teach in the tutorial is to set the default identity in $HOME/.gitconfig using "git config --global". The suggestion in the error message should match the order, while hinting that per repository identity can later be configured differently. Signed-off-by: Steffen Prohaska Signed-off-by: Junio C Hamano --- ident.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'ident.c') diff --git a/ident.c b/ident.c index 6612d17eba..9b2a852cb0 100644 --- a/ident.c +++ b/ident.c @@ -185,11 +185,11 @@ static const char *env_hint = "\n" "Run\n" "\n" -" git config user.email \"you@email.com\"\n" -" git config user.name \"Your Name\"\n" +" git config --global user.email \"you@email.com\"\n" +" git config --global user.name \"Your Name\"\n" "\n" -"To set the identity in this repository.\n" -"Add --global to set your account\'s default\n" +"to set your account\'s default identity.\n" +"Omit --global to set the identity only in this repository.\n" "\n"; const char *fmt_ident(const char *name, const char *email, -- cgit v1.2.3 From 13208572fbe8838fd8835548d7502202d1f7b21d Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Sun, 11 Nov 2007 17:35:58 +0000 Subject: builtin-commit: fix --signoff The Signed-off-by: line contained a spurious timestamp. The reason was a call to git_committer_info(1), which automatically added the timestamp. Instead, fmt_ident() was taught to interpret an empty string for the date (as opposed to NULL, which still triggers the default behavior) as "do not bother with the timestamp", and builtin-commit.c uses it. Signed-off-by: Johannes Schindelin Signed-off-by: Junio C Hamano --- ident.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'ident.c') diff --git a/ident.c b/ident.c index 9b2a852cb0..5be7533ffd 100644 --- a/ident.c +++ b/ident.c @@ -224,13 +224,17 @@ const char *fmt_ident(const char *name, const char *email, } strcpy(date, git_default_date); - if (date_str) - parse_date(date_str, date, sizeof(date)); + if (date_str) { + if (*date_str) + parse_date(date_str, date, sizeof(date)); + else + date[0] = '\0'; + } i = copy(buffer, sizeof(buffer), 0, name); i = add_raw(buffer, sizeof(buffer), i, " <"); i = copy(buffer, sizeof(buffer), i, email); - i = add_raw(buffer, sizeof(buffer), i, "> "); + i = add_raw(buffer, sizeof(buffer), i, date[0] ? "> " : ">"); i = copy(buffer, sizeof(buffer), i, date); if (i >= sizeof(buffer)) die("Impossibly long personal identifier"); -- cgit v1.2.3 From d9ccfe7711a8bf1ed9d9cd87daa9863e0d564b23 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Sun, 2 Dec 2007 13:43:34 -0800 Subject: Fix --signoff in builtin-commit differently. Introduce fmt_name() specifically meant for formatting the name and email pair, to add signed-off-by value. This reverts parts of 13208572fbe8838fd8835548d7502202d1f7b21d (builtin-commit: fix --signoff) so that an empty datestamp string given to fmt_ident() by mistake will error out as before. Signed-off-by: Junio C Hamano --- ident.c | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) (limited to 'ident.c') diff --git a/ident.c b/ident.c index 5be7533ffd..021d79b38b 100644 --- a/ident.c +++ b/ident.c @@ -192,12 +192,14 @@ static const char *env_hint = "Omit --global to set the identity only in this repository.\n" "\n"; -const char *fmt_ident(const char *name, const char *email, - const char *date_str, int error_on_no_name) +static const char *fmt_ident_1(const char *name, const char *email, + const char *date_str, int flag) { static char buffer[1000]; char date[50]; int i; + int error_on_no_name = !!(flag & 01); + int name_addr_only = !!(flag & 02); setup_ident(); if (!name) @@ -224,24 +226,36 @@ const char *fmt_ident(const char *name, const char *email, } strcpy(date, git_default_date); - if (date_str) { - if (*date_str) - parse_date(date_str, date, sizeof(date)); - else - date[0] = '\0'; - } + if (!name_addr_only && date_str) + parse_date(date_str, date, sizeof(date)); i = copy(buffer, sizeof(buffer), 0, name); i = add_raw(buffer, sizeof(buffer), i, " <"); i = copy(buffer, sizeof(buffer), i, email); - i = add_raw(buffer, sizeof(buffer), i, date[0] ? "> " : ">"); - i = copy(buffer, sizeof(buffer), i, date); + if (!name_addr_only) { + i = add_raw(buffer, sizeof(buffer), i, "> "); + i = copy(buffer, sizeof(buffer), i, date); + } else { + i = add_raw(buffer, sizeof(buffer), i, ">"); + } if (i >= sizeof(buffer)) die("Impossibly long personal identifier"); buffer[i] = 0; return buffer; } +const char *fmt_ident(const char *name, const char *email, + const char *date_str, int error_on_no_name) +{ + int flag = (error_on_no_name ? 01 : 0); + return fmt_ident_1(name, email, date_str, flag); +} + +const char *fmt_name(const char *name, const char *email) +{ + return fmt_ident_1(name, email, NULL, 03); +} + const char *git_author_info(int error_on_no_name) { return fmt_ident(getenv("GIT_AUTHOR_NAME"), -- cgit v1.2.3 From f64c81d4282b1dacf2cf095bfb0f7708b99b3ecf Mon Sep 17 00:00:00 2001 From: Alex Riesen Date: Mon, 3 Dec 2007 20:11:43 +0100 Subject: Simplify crud() in ident.c Signed-off-by: Alex Riesen Signed-off-by: Junio C Hamano --- ident.c | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) (limited to 'ident.c') diff --git a/ident.c b/ident.c index 9b2a852cb0..dbd0f527b2 100644 --- a/ident.c +++ b/ident.c @@ -113,25 +113,15 @@ static int add_raw(char *buf, size_t size, int offset, const char *str) static int crud(unsigned char c) { - static char crud_array[256]; - static int crud_array_initialized = 0; - - if (!crud_array_initialized) { - int k; - - for (k = 0; k <= 31; ++k) crud_array[k] = 1; - crud_array[' '] = 1; - crud_array['.'] = 1; - crud_array[','] = 1; - crud_array[':'] = 1; - crud_array[';'] = 1; - crud_array['<'] = 1; - crud_array['>'] = 1; - crud_array['"'] = 1; - crud_array['\''] = 1; - crud_array_initialized = 1; - } - return crud_array[c]; + return c <= 32 || + c == '.' || + c == ',' || + c == ':' || + c == ';' || + c == '<' || + c == '>' || + c == '"' || + c == '\''; } /* -- cgit v1.2.3 From 8e7425da782cbdff4531d84e0ef4ec7bd3ae23d7 Mon Sep 17 00:00:00 2001 From: David Symonds Date: Fri, 7 Dec 2007 10:36:45 +1100 Subject: Change from using email.com to example.com as example domain, as per RFC 2606. Signed-off-by: David Symonds Signed-off-by: Junio C Hamano --- ident.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ident.c') diff --git a/ident.c b/ident.c index 9b2a852cb0..3f6c29b74d 100644 --- a/ident.c +++ b/ident.c @@ -185,7 +185,7 @@ static const char *env_hint = "\n" "Run\n" "\n" -" git config --global user.email \"you@email.com\"\n" +" git config --global user.email \"you@example.com\"\n" " git config --global user.name \"Your Name\"\n" "\n" "to set your account\'s default identity.\n" -- cgit v1.2.3 From 774751a8bc594a5b56039bbdc43c45e3882dd804 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Sat, 8 Dec 2007 17:32:08 -0800 Subject: Re-fix "builtin-commit: fix --signoff" An earlier fix to the said commit was incomplete; it mixed up the meaning of the flag parameter passed to the internal fmt_ident() function, so this corrects it. git_author_info() and git_committer_info() can be told to issue a warning when no usable user information is found, and optionally can be told to error out. Operations that actually use the information to record a new commit or a tag will still error out, but the caller to leave reflog record will just silently use bogus user information. Not warning on misconfigured user information while writing a reflog entry is somewhat debatable, but it is probably nicer to the users to silently let it pass, because the only information you are losing is who checked out the branch. * git_author_info() and git_committer_info() used to take 1 (positive int) to error out with a warning on misconfiguration; this is now signalled with a symbolic constant IDENT_ERROR_ON_NO_NAME. * These functions used to take -1 (negative int) to warn but continue; this is now signalled with a symbolic constant IDENT_WARN_ON_NO_NAME. * fmt_ident() function implements the above error reporting behaviour common to git_author_info() and git_committer_info(). A symbolic constant IDENT_NO_DATE can be or'ed in to the flag parameter to make it return only the "Name ". * fmt_name() is a thin wrapper around fmt_ident() that always passes IDENT_ERROR_ON_NO_NAME and IDENT_NO_DATE. Signed-off-by: Junio C Hamano --- ident.c | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) (limited to 'ident.c') diff --git a/ident.c b/ident.c index 7631698f27..892d77ac93 100644 --- a/ident.c +++ b/ident.c @@ -182,14 +182,15 @@ static const char *env_hint = "Omit --global to set the identity only in this repository.\n" "\n"; -static const char *fmt_ident_1(const char *name, const char *email, - const char *date_str, int flag) +const char *fmt_ident(const char *name, const char *email, + const char *date_str, int flag) { static char buffer[1000]; char date[50]; int i; - int error_on_no_name = !!(flag & 01); - int name_addr_only = !!(flag & 02); + int error_on_no_name = (flag & IDENT_ERROR_ON_NO_NAME); + int warn_on_no_name = (flag & IDENT_WARN_ON_NO_NAME); + int name_addr_only = (flag & IDENT_NO_DATE); setup_ident(); if (!name) @@ -200,12 +201,12 @@ static const char *fmt_ident_1(const char *name, const char *email, if (!*name) { struct passwd *pw; - if (0 <= error_on_no_name && + if ((warn_on_no_name || error_on_no_name) && name == git_default_name && env_hint) { fprintf(stderr, env_hint, au_env, co_env); env_hint = NULL; /* warn only once, for "git-var -l" */ } - if (0 < error_on_no_name) + if (error_on_no_name) die("empty ident %s <%s> not allowed", name, email); pw = getpwuid(getuid()); if (!pw) @@ -234,30 +235,23 @@ static const char *fmt_ident_1(const char *name, const char *email, return buffer; } -const char *fmt_ident(const char *name, const char *email, - const char *date_str, int error_on_no_name) -{ - int flag = (error_on_no_name ? 01 : 0); - return fmt_ident_1(name, email, date_str, flag); -} - const char *fmt_name(const char *name, const char *email) { - return fmt_ident_1(name, email, NULL, 03); + return fmt_ident(name, email, NULL, IDENT_ERROR_ON_NO_NAME | IDENT_NO_DATE); } -const char *git_author_info(int error_on_no_name) +const char *git_author_info(int flag) { return fmt_ident(getenv("GIT_AUTHOR_NAME"), getenv("GIT_AUTHOR_EMAIL"), getenv("GIT_AUTHOR_DATE"), - error_on_no_name); + flag); } -const char *git_committer_info(int error_on_no_name) +const char *git_committer_info(int flag) { return fmt_ident(getenv("GIT_COMMITTER_NAME"), getenv("GIT_COMMITTER_EMAIL"), getenv("GIT_COMMITTER_DATE"), - error_on_no_name); + flag); } -- cgit v1.2.3 From 790296fd8863d649054096191d33bacbbf5c2115 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Thu, 3 Jan 2008 15:18:07 +0100 Subject: Fix grammar nits in documentation and in code comments. Signed-off-by: Jim Meyering Signed-off-by: Junio C Hamano --- ident.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ident.c') diff --git a/ident.c b/ident.c index 892d77ac93..b839dcf5f0 100644 --- a/ident.c +++ b/ident.c @@ -152,7 +152,7 @@ static int copy(char *buf, size_t size, int offset, const char *src) /* * Copy the rest to the buffer, but avoid the special * characters '\n' '<' and '>' that act as delimiters on - * a identification line + * an identification line */ for (i = 0; i < len; i++) { c = *src++; -- cgit v1.2.3 From 6c293d408dbbd0206e80df3ecda7f1620cadaa94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Santi=20B=C3=A9jar?= Date: Sat, 8 Mar 2008 12:30:04 +0100 Subject: ident.c: reword error message when the user name cannot be determined MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The "config --global" suggested in the message is a valid one-shot fix, and hopefully one-shot across machines that NFS mounts the home directories. This knowledge can hopefully be reused when you are forced to use git on Windows, but the fix based on GECOS would not be applicable, so it is not such a useful hint to mention the exact reason why the name cannot be determined. Signed-off-by: Santi Béjar Signed-off-by: Junio C Hamano --- ident.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ident.c') diff --git a/ident.c b/ident.c index b839dcf5f0..ed44a5345a 100644 --- a/ident.c +++ b/ident.c @@ -171,7 +171,7 @@ static const char au_env[] = "GIT_AUTHOR_NAME"; static const char co_env[] = "GIT_COMMITTER_NAME"; static const char *env_hint = "\n" -"*** Your name cannot be determined from your system services (gecos).\n" +"*** Please tell me who you are.\n" "\n" "Run\n" "\n" -- cgit v1.2.3 From bb1ae3f6fff19b0a1ab1bb6a815d26d39b9f15e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Santi=20B=C3=A9jar?= Date: Sun, 4 May 2008 18:04:51 +0200 Subject: commit: Show committer if automatic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To warn the user in case he/she might be using an unintended committer identity. Signed-off-by: Santi Béjar Signed-off-by: Junio C Hamano --- ident.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'ident.c') diff --git a/ident.c b/ident.c index ed44a5345a..b35504a8d2 100644 --- a/ident.c +++ b/ident.c @@ -250,6 +250,9 @@ const char *git_author_info(int flag) const char *git_committer_info(int flag) { + if (getenv("GIT_COMMITTER_NAME") && + getenv("GIT_COMMITTER_EMAIL")) + user_ident_explicitly_given = 1; return fmt_ident(getenv("GIT_COMMITTER_NAME"), getenv("GIT_COMMITTER_EMAIL"), getenv("GIT_COMMITTER_DATE"), -- cgit v1.2.3 From 5354a56fe70420c147f930e0f7f1decbae685d19 Mon Sep 17 00:00:00 2001 From: Todd Zullinger Date: Wed, 30 Jul 2008 13:48:33 -0400 Subject: Replace uses of "git-var" with "git var" Signed-off-by: Todd Zullinger Signed-off-by: Junio C Hamano --- ident.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ident.c') diff --git a/ident.c b/ident.c index b35504a8d2..09cf0c95c9 100644 --- a/ident.c +++ b/ident.c @@ -204,7 +204,7 @@ const char *fmt_ident(const char *name, const char *email, if ((warn_on_no_name || error_on_no_name) && name == git_default_name && env_hint) { fprintf(stderr, env_hint, au_env, co_env); - env_hint = NULL; /* warn only once, for "git-var -l" */ + env_hint = NULL; /* warn only once, for "git var -l" */ } if (error_on_no_name) die("empty ident %s <%s> not allowed", name, email); -- cgit v1.2.3 From d404bf0288ac1a2c4276d009c0e1c88519e5a7c9 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Mon, 1 Dec 2008 08:41:50 -0800 Subject: Add backslash to list of 'crud' characters in real name We remove crud characters at the beginning and end of real-names so that when we see email addresses like From: "David S. Miller" we drop the quotes around the name when we parse that and split it up into name and email. However, the list of crud characters was basically just a random list of common things that are found around names, and it didn't contain the backslash character that some insane scripts seem to use when quoting things. So now the kernel has a number of authors listed like Author: \"Rafael J. Wysocki\ because the author name had started out as From: \"Rafael J. Wysocki\" and the only "crud" character we noticed and removed was the final double-quote at the end. We should probably do better quote removal from names anyway, but this is the minimal obvious patch. Signed-off-by: Linus Torvalds Signed-off-by: Junio C Hamano --- ident.c | 1 + 1 file changed, 1 insertion(+) (limited to 'ident.c') diff --git a/ident.c b/ident.c index 09cf0c95c9..99f1c85ea5 100644 --- a/ident.c +++ b/ident.c @@ -121,6 +121,7 @@ static int crud(unsigned char c) c == '<' || c == '>' || c == '"' || + c == '\\' || c == '\''; } -- cgit v1.2.3