]> git.pond.sub.org Git - empserver/commitdiff
Change how client option -s interprets ':'
authorMarkus Armbruster <armbru@pond.sub.org>
Fri, 2 Apr 2010 09:51:15 +0000 (11:51 +0200)
committerMarkus Armbruster <armbru@pond.sub.org>
Sun, 9 May 2010 07:08:01 +0000 (09:08 +0200)
Old version recognizes the first ':', which prevents use of ':' in
host names.  They are used in numerical IPv6 addresses.  New version
recognizes the last ':', which prevents use of ':' in service names.

Old version treats empty host or port specially (use default).
Documentation suggests ':' is required, but the code doesn't do that.
Instead, the argument is interpreted as host, even when it's empty.

New version makes the HOST: part optional.  You can't specify host and
default the port.  Tough.  Keeps documentation and code as simple as
possible.

Compare:

                old version             new version
    argument    host    port            host    port
    ""          ""      default         default ""
    "A"         "A"     default         default "A"
    ":"         default default         ""      ""
    "A:"        "A"     default         "A"     ""
    ":B"        default "B"             ""      "B"
    "A:B"       "A"     "B"             "A"     "B"

man/empire.6
src/client/main.c

index ae4d731ce745e5d5e1a14100c26c7edb730d0fab..4df55b32866c9d279705b525cdf35c2bd49cbc37 100644 (file)
@@ -37,11 +37,8 @@ Help.  Print brief usage information and exit.
 .B \-k
 If someone else is connected to your country, kill their connection.
 .TP
-.BI \-s " host:port"
-Specify host and port to which to connect.
-.IP
-Connect to \fIhost\fR using port \fIport\fR.  You can specify only
-one; just leave the other empty (include the colon).
+.BI \-s " [host:]port"
+Specify server \fIhost\fR and \fIport\fR.
 .TP
 .B \-u
 Use UTF-8 rather than ASCII character set.
index b6c2298f847c9e85ae3ccaff128af353fbf28b71..b9f74746240e4275ce9c6351eb6780bd601aa1a1 100644 (file)
@@ -69,7 +69,7 @@ print_usage(char *program_name)
     printf("Usage: %s [OPTION]...[COUNTRY [PASSWORD]]\n"
           "  -2 FILE         Append log of session to FILE\n"
           "  -k              Kill connection\n"
-          "  -s HOST:PORT    Set host and port to connect\n"
+          "  -s [HOST:]PORT  Specify server HOST and PORT\n"
           "  -u              Use UTF-8\n"
           "  -h              display this help and exit\n"
           "  -v              display version information and exit\n",
@@ -89,6 +89,7 @@ main(int argc, char **argv)
     char *country;
     char *passwd;
     char *uname;
+    char *colon;
     int sock;
 
     while ((opt = getopt(argc, argv, "2:ks:uhv")) != EOF) {
@@ -100,17 +101,12 @@ main(int argc, char **argv)
            send_kill = 1;
            break;
        case 's':
-           host = strdup(optarg);
-           port = strchr(host, ':');
-           if (port == host) { /* if no host specified, then set to null */
-               host = NULL;
-           }
-           if (port) {        /* make port the bit after the colon */
-               port[0] = 0;
-               port++;
-               if (port[0] == 0) { /* handle colon-at-end-of-string */
-                   port = NULL;
-               }
+           port = strdup(optarg);
+           colon = strrchr(port, ':');
+           if (colon) {
+               *colon = 0;
+               host = port;
+               port = colon + 1;
            }
            break;
        case 'u':