added simplified Unicode support for non-locale-enabled builds
[oweals/busybox.git] / libbb / die_if_bad_username.c
index 251b1f06c03bdc36ae5188119d190f6e7fdb309e..c1641d376ab7ca8998947037a7cd55caa3321c04 100644 (file)
@@ -1,6 +1,6 @@
 /* vi: set sw=4 ts=4: */
 /*
- * Ckeck user and group names for illegal characters
+ * Check user and group names for illegal characters
  *
  * Copyright (C) 2008 Tito Ragusa <farmatito@tiscali.it>
  *
  * at the end of the username.
  */
 
-void die_if_bad_username(const char *name)
+void FAST_FUNC die_if_bad_username(const char *name)
 {
-       int i = 0;
-
+       goto skip; /* 1st char being dash isn't valid */
        do {
-               if (!isalnum(*name)
-                && !(*name == '_')
-                && !(*name == '.')
-                && !(*name == '@')
-                && !(*name == '-' && i)
-                && !(*name == '$' && !*(name + 1))
-               )
-                       bb_error_msg_and_die("illegal character '%c'", *name);
-               i++;
+               if (*name == '-')
+                       continue;
+ skip:
+               if (isalnum(*name)
+                || *name == '_'
+                || *name == '.'
+                || *name == '@'
+                || (*name == '$' && !*(name + 1))
+               ) {
+                       continue;
+               }
+               bb_error_msg_and_die("illegal character '%c'", *name);
        } while (*++name);
 }