All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.luaj.vm2.lib.jse.JseOsLib Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
* Copyright (c) 2009 Luaj.org. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
* 
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
package org.luaj.vm2.lib.jse;

import java.io.File;
import java.io.IOException;

import org.luaj.vm2.Globals;
import org.luaj.vm2.LuaValue;
import org.luaj.vm2.Varargs;
import org.luaj.vm2.lib.LibFunction;
import org.luaj.vm2.lib.OsLib;

/**
 * Subclass of {@link LibFunction} which implements the standard lua {@code os} library.
 * 

* This contains more complete implementations of the following functions * using features that are specific to JSE: *

    *
  • {@code execute()}
  • *
  • {@code remove()}
  • *
  • {@code rename()}
  • *
  • {@code tmpname()}
  • *
*

* Because the nature of the {@code os} library is to encapsulate * os-specific features, the behavior of these functions varies considerably * from their counterparts in the C platform. *

* Typically, this library is included as part of a call to * {@link org.luaj.vm2.lib.jse.JsePlatform#standardGlobals()} *

 {@code
 * Globals globals = JsePlatform.standardGlobals();
 * System.out.println( globals.get("os").get("time").call() );
 * } 
*

* For special cases where the smallest possible footprint is desired, * a minimal set of libraries could be loaded * directly via {@link Globals#load(LuaValue)} using code such as: *

 {@code
 * Globals globals = new Globals();
 * globals.load(new JseBaseLib());
 * globals.load(new PackageLib());
 * globals.load(new JseOsLib());
 * System.out.println( globals.get("os").get("time").call() );
 * } 
*

However, other libraries such as MathLib are not loaded in this case. *

* @see LibFunction * @see OsLib * @see org.luaj.vm2.lib.jse.JsePlatform * @see org.luaj.vm2.lib.jme.JmePlatform * @see Lua 5.2 OS Lib Reference */ public class JseOsLib extends org.luaj.vm2.lib.OsLib { /** return code indicating the execute() threw an I/O exception */ public static int EXEC_IOEXCEPTION = 1; /** return code indicating the execute() was interrupted */ public static int EXEC_INTERRUPTED = -2; /** return code indicating the execute() threw an unknown exception */ public static int EXEC_ERROR = -3; /** public constructor */ public JseOsLib() { } protected String getenv(String varname) { String s = System.getenv(varname); return s != null? s : System.getProperty(varname); } protected Varargs execute(String command) { int exitValue; try { exitValue = new JseProcess(command, null, globals.STDOUT, globals.STDERR).waitFor(); } catch (IOException ioe) { exitValue = EXEC_IOEXCEPTION; } catch (InterruptedException e) { exitValue = EXEC_INTERRUPTED; } catch (Throwable t) { exitValue = EXEC_ERROR; } if (exitValue == 0) return varargsOf(TRUE, valueOf("exit"), ZERO); return varargsOf(NIL, valueOf("signal"), valueOf(exitValue)); } protected void remove(String filename) throws IOException { File f = new File(filename); if ( ! f.exists() ) throw new IOException("No such file or directory"); if ( ! f.delete() ) throw new IOException("Failed to delete"); } protected void rename(String oldname, String newname) throws IOException { File f = new File(oldname); if ( ! f.exists() ) throw new IOException("No such file or directory"); if ( ! f.renameTo(new File(newname)) ) throw new IOException("Failed to delete"); } protected String tmpname() { try { java.io.File f = java.io.File.createTempFile(TMP_PREFIX ,TMP_SUFFIX); return f.getName(); } catch ( IOException ioe ) { return super.tmpname(); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy