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

net.oneandone.stool.setup.Control Maven / Gradle / Ivy

There is a newer version: 4.0.3
Show newest version
/**
 * Copyright 1&1 Internet AG, https://github.com/1and1/
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package net.oneandone.stool.setup;

import net.oneandone.sushi.fs.World;
import net.oneandone.sushi.fs.file.FileNode;

import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;

/** Creates an directory with debian maintainer scripts. */
public class Control {
    public static void main(String[] args) throws IOException {
        World world;

        if (args.length != 4) {
            throw new IOException("usage: control main srcdir application dest");
        }
        world = World.create();
        run(args[0], world.file(args[1]), world.file(args[2]), world.file(args[3]));
        System.exit(0);
    }

    public static void run(String main, FileNode srcdir, FileNode application, FileNode dest) throws IOException {
        String launcherStr;
        byte[] launcher;
        byte[] orig;
        int idx;

        launcherStr = srcdir.getWorld().resource("templates/maintainer-launcher").readString();
        launcherStr = launcherStr.replace("%MAIN%", main);
        launcher = launcherStr.getBytes("UTF8");

        srcdir.checkDirectory();
        application.checkFile();
        dest.mkdir();

        orig = application.readBytes();
        idx = endOfLauncher(orig);
        srcdir.copyDirectory(dest);
        dest.join("preinst").writeBytes(launcher);
        dest.join("postinst").writeBytes(launcher);
        dest.join("prerm").writeBytes(launcher);
        try (OutputStream out = dest.join("postrm.bin").newOutputStream()) {
            out.write(launcher);
            out.write(orig, idx, orig.length - idx);
        }
    }

    private static int endOfLauncher(byte[] all) {
        try {
            return indexOf(all, "\nPK".getBytes("ascii"));
        } catch (UnsupportedEncodingException e) {
            throw new IllegalStateException();
        }
    }

    public static int indexOf(byte[] array, byte[] sub) {
        int j;

        for (int i = 0; i < array.length - sub.length; i++) {
            for (j = 0; j < sub.length; j++) {
                if (sub[j] != array[i + j]) {
                    break;
                }
            }
            if (j == sub.length) {
                return i;
            }
        }
        throw new IllegalStateException();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy