[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[harden-mac:0175] Re: tcsh 6.12.00 patch (Re: Mac OS X のターミナル )



こんにちは、Yan です。

+--Yan <yan@xxxxxxx> の、
|  [harden-mac:0174] Re: Mac OS X   のターミナル
|  "<20021023015224.387C08%022E053A@xxxxxxx>"
|  に関するメールについて。
|
|で、ソースをつらつら眺めるうちに、あやしげな所を見つけました。
|これで取りあえず現象は収まるようですが、正しい対処かどうか分かりませんので
|あしからず。

これだと、文字列が途中でぶった切られたまま、コマンド引数として
実行されてしまいますので、もう少しまともに、Word too long. が
出るように変更してみました。
#何か別の副作用があるかも...

ちょっと長いですが、patchです。

*** sh.glob.c.orig      Fri Jul  5 04:28:29 2002
--- sh.glob.c   Thu Oct 24 16:11:05 2002
***************
*** 81,87 ****
  static  void    expbrace      __P((Char ***, Char ***, int));
  static  int     pmatch        __P((Char *, Char *, Char **));
  static        void      pword         __P((int));
! static        void      psave         __P((int));
  static        void      backeval      __P((Char *, bool));

  static Char *
--- 81,87 ----
  static  void    expbrace      __P((Char ***, Char ***, int));
  static  int     pmatch        __P((Char *, Char *, Char **));
  static        void      pword         __P((int));
! static        int       psave         __P((int));
  static        void      backeval      __P((Char *, bool));

  static Char *
***************
*** 879,884 ****
--- 879,885 ----
      (void) close(pvec[1]);
      c = 0;
      ip = NULL;
+       int ierr = 0;
      do {
        int     cnt = 0;

***************
*** 892,897 ****
--- 893,899 ----
                while (icnt == -1 && errno == EINTR);
                if (icnt <= 0) {
                    c = -1;
+                       if (ierr) stderror(ERR_WTOOLONG);
                    break;
                }
                for (i = 0; i < icnt; i++)
***************
*** 918,924 ****
            if (!quoted && (c == ' ' || c == '\t'))
                break;
            cnt++;
!           psave(c | quoted);
        }
        /*
         * Unless at end-of-file, we will form a new word here if there were
--- 920,926 ----
            if (!quoted && (c == ' ' || c == '\t'))
                break;
            cnt++;
!           ierr = psave(c | quoted);
        }
        /*
         * Unless at end-of-file, we will form a new word here if there were
***************
*** 935,947 ****
      prestjob();
  }

! static void
  psave(c)
      int    c;
  {
      if (--pnleft <= 0)
!       stderror(ERR_WTOOLONG);
      *pargcp++ = (Char) c;
  }

  static void
--- 937,951 ----
      prestjob();
  }

! static int
  psave(c)
      int    c;
  {
      if (--pnleft <= 0)
!       return 1;
!       else
      *pargcp++ = (Char) c;
+       return 0;
  }

  static void

--_| _/ _/|  _|  _/ ---- Yan (m78.com) ----
   _/  _/_| _/_|_/      mailto:yan@xxxxxxx
  _/  _/ _|_/  _|      http://yan.m78.com/

--[PR]------------------------------------------------------------------
    ■■転職希望者や大学生のみなさんに朗報!!■■
志を抱く人々のキャリア開発支援サイト e−アンビシャスプラザ・無料キャ
ンペーン実施!! いま会員登録すれば、通常¥1,050の「利き脳」理論
を応用した適性検査が無料で受検できます(9/25から10/31まで)
 http://ad.freeml.com/cgi-bin/ad.cgi?id=bvR74
------------------------------------------------------------------[PR]--
<GMO GROUP> Global Media Online  www.gmo.jp