shithub: riscv

ref: 53fe82ee861967f0c02dbec7901660470da79098
dir: /sys/src/cmd/upas/imap4d/fsenc.c/

View raw version
/*
 * more regrettable, goofy processing
 */
#include "imap4d.h"

char tab[0x7f] = {
['\t']	'0',
[' ']	'#',
['#']	'1',
};

char itab[0x7f] = {
['0']	'\t',
['#']	' ',
['1']	'#',
};

char*
encfs(char *buf, int n, char *s)
{
	char *p, c;

	if(!s){
		*buf = 0;
		return 0;
	}
	if(!cistrcmp(s, "inbox"))
		s = "mbox";
	for(p = buf; n > 0 && (c = *s++); n--){
		if(tab[c & 0x7f]){
			if(n < 1)
				break;
			if((c = tab[c]) == 0)
				break;
			*p++ = '#';
		}
		*p++ = c;
	}
	*p = 0;
	return buf;
}

char*
decfs(char *buf, int n, char *s)
{
	char *p, c;

	if(!s){
		*buf = 0;
		return 0;
	}
	if(!cistrcmp(s, "mbox"))
		s = "INBOX";
	for(p = buf; n > 0 && (c = *s++); n--){
		if(c == '#'){
			c = *s++;
			if((c = itab[c]) == 0)
				break;
		}
		*p++ = c;
	}
	*p = 0;
	return buf;
}

/*
void
usage(void)
{
	fprint(2, "usage: encfs [-d] ...\n");
	exits("usage");
}

void
main(int argc, char **argv)
{
	char buf[1024];
	int dflag;
	char *(*f)(char*, int, char*);

	dflag = 0;
	ARGBEGIN{
	case 'd':
		dflag ^= 1;
		break;
	default:
		usage();
	}ARGEND
	f = encfs;
	if(dflag)
		f = decfs;
	while(*argv){
		f(buf, sizeof buf, *argv++);
		print("%s\n", buf);
	}
	exits("");
}
*/