test: suppress gcc warning
authorDenis Vlasenko <vda.linux@googlemail.com>
Mon, 25 Jun 2007 10:35:11 +0000 (10:35 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Mon, 25 Jun 2007 10:35:11 +0000 (10:35 -0000)
telnetd: do not use suferfluous static variable.

coreutils/test.c
networking/telnetd.c

index 5ca46725b2e3cb17325682093436fc498610ed1e..36fb38a64606e7b4874a3a803321d118ef5bd517 100644 (file)
@@ -386,7 +386,7 @@ static int binop(void)
 static int filstat(char *nm, enum token mode)
 {
        struct stat s;
-       int i;
+       int i = i; /* gcc 3.x thinks it can be used uninitialized */
 
        if (mode == FILSYM) {
 #ifdef S_IFLNK
index 21b704a461e8732b222de0243b4702cde31179e9..9246f705203201e8ac30b1f904b5dc2556cebc58 100644 (file)
@@ -21,7 +21,6 @@
  *     Set process group corrections, initial busybox port
  */
 
-/*#define DEBUG 1 */
 #define DEBUG 0
 
 #include "libbb.h"
@@ -34,8 +33,6 @@
 #include <sys/syslog.h>
 
 
-#define BUFSIZE 4000
-
 #if ENABLE_LOGIN
 static const char *loginpath = "/bin/login";
 #else
@@ -44,10 +41,6 @@ static const char *loginpath = DEFAULT_SHELL;
 
 static const char *issuefile = "/etc/issue.net";
 
-/* shell name and arguments */
-
-static const char *argv_init[2];
-
 /* structure that describes a session */
 
 struct tsession {
@@ -60,6 +53,10 @@ struct tsession {
        int rdidx2, wridx2, size2;
 };
 
+/* Two buffers are directly after tsession in malloced memory.
+ * Make whole thing fit in 4k */
+enum { BUFSIZE = (4*1024 - sizeof(struct tsession)) / 2 };
+
 /*
    This is how the buffers are used. The arrows indicate the movement
    of data.
@@ -231,6 +228,7 @@ make_new_session(
                USE_FEATURE_TELNETD_STANDALONE(int sock_r, int sock_w)
                SKIP_FEATURE_TELNETD_STANDALONE(void)
 ) {
+       const char *login_argv[2];
        struct termios termbuf;
        int fd, pid;
        char tty_name[32];
@@ -283,7 +281,7 @@ make_new_session(
 
        /* child */
 
-       /* make new process group */
+       /* make new session and process group */
        setsid();
 
        /* open the child's side of the tty. */
@@ -294,7 +292,7 @@ make_new_session(
        dup2(fd, 1);
        dup2(fd, 2);
        while (fd > 2) close(fd--);
-       tcsetpgrp(0, getpid()); /* comment? */
+       tcsetpgrp(0, getpid()); /* switch this tty's process group to us */
 
        /* The pseudo-terminal allocated to the client is configured to operate in
         * cooked mode, and with XTABS CRMOD enabled (see tty(4)). */
@@ -308,9 +306,12 @@ make_new_session(
 
        print_login_issue(issuefile, NULL);
 
-       /* exec shell, with correct argv and env */
-       execv(loginpath, (char *const *)argv_init);
-       bb_perror_msg_and_die("execv");
+       /* exec shell / login /whatever */
+       login_argv[0] = loginpath;
+       login_argv[1] = NULL;
+       execv(loginpath, (char **)login_argv);
+       /* Hmmm... this gets sent to the client thru fd#2! Is it ok?? */
+       bb_perror_msg_and_die("execv %s", loginpath);
 }
 
 #if ENABLE_FEATURE_TELNETD_STANDALONE
@@ -405,7 +406,6 @@ int telnetd_main(int argc, char **argv)
 
        /* Used to check access(loginpath, X_OK) here. Pointless.
         * exec will do this for us for free later. */
-       argv_init[0] = loginpath;
 
 #if ENABLE_FEATURE_TELNETD_STANDALONE
        if (IS_INETD) {