/**
   * Creates a new header for a file/directory entry.
   *
   * @param name File name
   * @param size File size in bytes
   * @param modTime Last modification time in numeric Unix time format
   * @param dir Is directory
   * @return
   */
  public static TarHeader createHeader(String entryName, long size, long modTime, boolean dir) {
    String name = entryName;
    name = TarUtils.trim(name.replace(File.separatorChar, '/'), '/');

    TarHeader header = new TarHeader();
    header.linkName = new StringBuffer("");

    if (name.length() > 100) {
      header.namePrefix = new StringBuffer(name.substring(0, name.lastIndexOf('/')));
      header.name = new StringBuffer(name.substring(name.lastIndexOf('/') + 1));
    } else {
      header.name = new StringBuffer(name);
    }

    if (dir) {
      header.mode = 040755;
      header.linkFlag = TarHeader.LF_DIR;
      if (header.name.charAt(header.name.length() - 1) != '/') {
        header.name.append("/");
      }
      header.size = 0;
    } else {
      header.mode = 0100644;
      header.linkFlag = TarHeader.LF_NORMAL;
      header.size = size;
    }

    header.modTime = modTime;
    header.checkSum = 0;
    header.devMajor = 0;
    header.devMinor = 0;

    return header;
  }