
de.innosystec.unrar.rarfile.FileNameDecoder Maven / Gradle / Ivy
The newest version!
/*
*
* Original author: alpha_lam
* Creation date: ?
*
* Source: $HeadURL$
* Last changed: $LastChangedDate$
*
*
* the unrar licence applies to all junrar source and binary distributions
* you are not allowed to use this source to re-create the RAR compression algorithm
*
* Here some html entities which can be used for escaping javadoc tags:
* "&": "&" or "&"
* "<": "<" or "<"
* ">": ">" or ">"
* "@": "@"
*/
package de.innosystec.unrar.rarfile;
public class FileNameDecoder {
public static int getChar(byte [] name,int pos){
return name[pos]&0xff;
}
public static String decode(byte [] name,int encPos){
int decPos = 0;
int flags = 0;
int flagBits = 0;
int low = 0;
int high = 0;
int highByte = getChar(name,encPos++);
StringBuffer buf = new StringBuffer();
while(encPos < name.length){
if(flagBits == 0){
flags = getChar(name,encPos++);
flagBits = 8;
}
switch(flags >> 6){
case 0:
buf.append((char)(getChar(name,encPos++)));
++decPos;
break;
case 1:
buf.append((char)(getChar(name,encPos++)+(highByte<<8)));
++decPos;
break;
case 2:
low = getChar(name,encPos);
high = getChar(name,encPos+1);
buf.append((char)((high << 8) + low));
++decPos;
encPos += 2;
break;
case 3:
int length = getChar(name,encPos++);
if((length&0x80)!=0){
int correction = getChar(name,encPos++);
for(length=(length&0x7f)+2;length>0&&decPos0&&decPos
© 2015 - 2025 Weber Informatics LLC | Privacy Policy