Changeset 3803


Ignore:
Timestamp:
09/16/03 00:44:00 (19 years ago)
Author:
piso
Message:

Bulletproofing: avoid problems if shellCommand is null.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/j/src/org/armedbear/j/Shell.java

    r2655 r3803  
    33 *
    44 * Copyright (C) 1998-2003 Peter Graves
    5  * $Id: Shell.java,v 1.27 2003-06-29 00:19:34 piso Exp $
     5 * $Id: Shell.java,v 1.28 2003-09-16 00:44:00 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    5555        this();
    5656        this.shellCommand = shellCommand;
    57         if (shellCommand.indexOf("tcsh") >= 0)
     57        if (shellCommand != null && shellCommand.indexOf("tcsh") >= 0)
    5858            promptIsStderr = false;
    5959    }
     
    8282        String s =
    8383            Editor.preferences().getStringProperty(Property.SHELL_FILE_NAME);
    84         if (s != null)
     84        if (s != null && s.length() > 0)
    8585            return s;
    8686        return Platform.isPlatformWindows() ? "cmd.exe" : "bash -i";
     
    9494    private static Shell createShell(String shellCommand)
    9595    {
     96        if (shellCommand == null) {
     97            Debug.bug();
     98            return null;
     99        }
    96100        Shell shell = new Shell(shellCommand);
    97101        shell.startProcess();
     
    109113    protected void startProcess()
    110114    {
     115        if (shellCommand == null) {
     116            Debug.bug();
     117            return;
     118        }
    111119        if (Platform.isPlatformWindows())
    112120            if (shellCommand.toLowerCase().indexOf("cmd.exe") < 0)
    113121                cygnify = true;
    114 
    115122        // Only set initialDir the first time we run, so that if we restart
    116123        // this shell, it will start up in the same directory each time.
     
    120127                initialDir = Directories.getUserHomeDirectory();
    121128        }
    122 
    123129        // Shell command may contain a space (e.g. "bash -i").
    124130        StringTokenizer st = new StringTokenizer(shellCommand);
    125 
    126131        String[] cmdArray;
    127132        int i = 0;
     
    133138        while (st.hasMoreTokens())
    134139            cmdArray[i++] = st.nextToken();
    135 
    136140        Process p = null;
    137141        try {
     
    144148            return;
    145149        }
    146 
    147150        currentDir = initialDir;
    148151        startWatcherThread();
    149 
    150152        // See if the process exits right away (meaning jpty couldn't launch
    151153        // the shell command).
     
    160162        if (getProcess() == null)
    161163            return; // Process exited.
    162 
    163164        setPromptRE(Editor.preferences().getStringProperty(
    164165            Property.SHELL_PROMPT_PATTERN));
    165 
    166166        try {
    167167            stdin  = new OutputStreamWriter(p.getOutputStream());
     
    437437    public String toString()
    438438    {
    439         return shellCommand;
    440     }
    441 
    442     public String getTitle()
    443     {
    444         String dir = currentDir.toString();
    445 
    446         // Upper case drive letter.
    447         if (Platform.isPlatformWindows() && dir.length() >= 2 && dir.charAt(1) == ':')
    448             dir = Character.toUpperCase(dir.charAt(0)) + dir.substring(1);
    449 
    450         return shellCommand + "   " + dir;
     439        return shellCommand != null ? shellCommand : "";
    451440    }
    452441
     
    588577    public static void shell(String shellCommand)
    589578    {
     579        if (shellCommand == null) {
     580            Debug.bug();
     581            return;
     582        }
    590583        if (!Editor.checkExperimental())
    591584            return;
     
    605598            Buffer b = it.nextBuffer();
    606599            if (b instanceof Shell) {
    607                 if (((Shell)b).shellCommand.equals(shellCommand)) {
     600                if (shellCommand.equals(((Shell)b).shellCommand)) {
    608601                    buf = b;
    609602                    break;
Note: See TracChangeset for help on using the changeset viewer.