- don't free user-supplied string (via -e)
[oweals/busybox.git] / libbb / die_if_bad_username.c
index 251b1f06c03bdc36ae5188119d190f6e7fdb309e..602aadc0cf973a40514b9abb366276db587685fd 100644 (file)
  * 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);
 }