/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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 org.apache.commons.compress.archivers.cpio;

/**
 * All constants needed by CPIO.
 * 
 * based on code from the jRPM project (jrpm.sourceforge.net) 
 * 
 */
public interface CpioConstants {
    /** magic number of a cpio entry in the new format */
    String MAGIC_NEW = "070701";

    /** magic number of a cpio entry in the new format with crc */
    String MAGIC_NEW_CRC = "070702";

    /** magic number of a cpio entry in the old ascii format */
    String MAGIC_OLD_ASCII = "070707";

    /** magic number of a cpio entry in the old binary format */
    int MAGIC_OLD_BINARY = 070707;

    // These FORMAT_ constants are internal to the code

    /** write/read a CPIOArchiveEntry in the new format */
    short FORMAT_NEW = 1;

    /** write/read a CPIOArchiveEntry in the new format with crc */
    short FORMAT_NEW_CRC = 2;

    /** write/read a CPIOArchiveEntry in the old ascii format */
    short FORMAT_OLD_ASCII = 4;

    /** write/read a CPIOArchiveEntry in the old binary format */
    short FORMAT_OLD_BINARY = 8;

    /** Mask for both new formats */
    short FORMAT_NEW_MASK = 3;

    /** Mask for both old formats */
    short FORMAT_OLD_MASK = 12;

    /*
     * Constants for the MODE bits
     */

    /** Mask for all file type bits. */
    int S_IFMT   = 0170000;

 // http://www.opengroup.org/onlinepubs/9699919799/basedefs/cpio.h.html
 // has a list of the C_xxx constatnts

    /** Defines a socket */
    int C_ISSOCK = 0140000;

    /** Defines a symbolic link */
    int C_ISLNK  = 0120000;

    /** HP/UX network special (C_ISCTG) */
    int C_ISNWK  = 0110000;

    /** Defines a regular file */
    int C_ISREG  = 0100000;

    /** Defines a block device */
    int C_ISBLK  = 0060000;

    /** Defines a directory */
    int C_ISDIR  = 0040000;

    /** Defines a character device */
    int C_ISCHR  = 0020000;

    /** Defines a pipe */
    int C_ISFIFO = 0010000;


    /** Set user ID */
    int C_ISUID  = 0004000;

    /** Set group ID */
    int C_ISGID  = 0002000;

    /** On directories, restricted deletion flag. */
    int C_ISVTX  = 0001000;


    /** Permits the owner of a file to read the file */
    int C_IRUSR  = 0000400;

    /** Permits the owner of a file to write to the file */
    int C_IWUSR  = 0000200;

    /** Permits the owner of a file to execute the file or to search the directory */
    int C_IXUSR  = 0000100;


    /** Permits a file's group to read the file */
    int C_IRGRP  = 0000040;

    /** Permits a file's group to write to the file */
    int C_IWGRP  = 0000020;

    /** Permits a file's group to execute the file or to search the directory */
    int C_IXGRP  = 0000010;


    /** Permits others to read the file */
    int C_IROTH  = 0000004;

    /** Permits others to write to the file */
    int C_IWOTH  = 0000002;

    /** Permits others to execute the file or to search the directory */
    int C_IXOTH  = 0000001;

    /** The special trailer marker */
    String CPIO_TRAILER = "TRAILER!!!";

    /**
     * The default block size.
     * 
     * @since 1.1
     */
    int BLOCK_SIZE = 512;
}
