From e5888a1ffdae813d7575f5fb02275c6bb07e5199 Mon Sep 17 00:00:00 2001 From: Taru Karttunen Date: Wed, 30 Mar 2011 15:46:40 +0300 Subject: Import sources from 2011-03-30 iso image --- sys/src/cmd/aux/flashfs/conv.c | 211 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100755 sys/src/cmd/aux/flashfs/conv.c (limited to 'sys/src/cmd/aux/flashfs/conv.c') diff --git a/sys/src/cmd/aux/flashfs/conv.c b/sys/src/cmd/aux/flashfs/conv.c new file mode 100755 index 000000000..126ecc4da --- /dev/null +++ b/sys/src/cmd/aux/flashfs/conv.c @@ -0,0 +1,211 @@ +#include +#include +#include "flashfs.h" + +int +convJ2M(Jrec *j, uchar *buff) +{ + int m, n; + + switch(j->type) { + case FT_create: + if(j->mode & (1 << 8)) { + if(j->mode & DMDIR) + j->type = FT_DCREATE1; + else + j->type = FT_FCREATE1; + } + else { + if(j->mode & DMDIR) + j->type = FT_DCREATE0; + else + j->type = FT_FCREATE0; + } + case FT_FCREATE0: + case FT_FCREATE1: + case FT_DCREATE0: + case FT_DCREATE1: + n = putc3(&buff[0], j->fnum); + goto create; + case FT_chmod: + if(j->mode & (1 << 8)) + j->type = FT_CHMOD1; + else + j->type = FT_CHMOD0; + case FT_CHMOD0: + case FT_CHMOD1: + n = putc3(&buff[0], j->fnum); + buff[n++] = j->mode; + return n + putc3(&buff[n], j->mnum); + case FT_REMOVE: + return putc3(&buff[0], j->fnum); + case FT_WRITE: + n = putc3(&buff[0], j->fnum); + n += putc3(&buff[n], j->mtime); + n += putc3(&buff[n], j->offset); + return n + putc3(&buff[n], j->size - 1); + case FT_AWRITE: + n = putc3(&buff[0], j->fnum); + n += putc3(&buff[n], j->offset); + return n + putc3(&buff[n], j->size - 1); + case FT_trunc: + if(j->mode & (1 << 8)) + j->type = FT_TRUNC1; + else + j->type = FT_TRUNC0; + case FT_TRUNC0: + case FT_TRUNC1: + n = putc3(&buff[0], j->fnum); + n += putc3(&buff[n], j->tnum); + goto create; + case FT_SUMMARY: + case FT_SUMBEG: + return putc3(&buff[0], j->seq); + case FT_SUMEND: + return 0; + create: + buff[n++] = j->mode; + n += putc3(&buff[n], j->mtime); + n += putc3(&buff[n], j->parent); + m = strlen(j->name); + memmove(&buff[n], j->name, m); + n += m; + buff[n++] = '\0'; + return n; + } + return -1; +} + +int +convM2J(Jrec *j, uchar *buff) +{ + int m, n; + + j->type = buff[0]; + + switch(j->type) { + case FT_FCREATE0: + case FT_FCREATE1: + case FT_DCREATE0: + case FT_DCREATE1: + n = 1 + getc3(&buff[1], &j->fnum); + j->mode = buff[n++]; + switch(j->type) { + case FT_FCREATE0: + break; + case FT_FCREATE1: + j->mode |= 1 << 8; + break; + case FT_DCREATE0: + j->mode |= DMDIR; + break; + case FT_DCREATE1: + j->mode |= DMDIR | (1 << 8); + break; + } + j->type = FT_create; + goto create; + case FT_CHMOD0: + case FT_CHMOD1: + n = 1 + getc3(&buff[1], &j->fnum); + j->mode = buff[n++]; + switch(j->type) { + case FT_CHMOD0: + break; + case FT_CHMOD1: + j->mode |= 1 << 8; + break; + } + j->type = FT_chmod; + return n + getc3(&buff[n], &j->mnum); + case FT_REMOVE: + return 1 + getc3(&buff[1], &j->fnum); + case FT_WRITE: + n = 1 + getc3(&buff[1], &j->fnum); + n += getc3(&buff[n], &j->mtime); + n += getc3(&buff[n], &j->offset); + n += getc3(&buff[n], &j->size); + j->size++; + return n; + case FT_AWRITE: + n = 1 + getc3(&buff[1], &j->fnum); + n += getc3(&buff[n], &j->offset); + n += getc3(&buff[n], &j->size); + j->size++; + return n; + case FT_TRUNC0: + case FT_TRUNC1: + n = 1 + getc3(&buff[1], &j->fnum); + n += getc3(&buff[n], &j->tnum); + j->mode = buff[n++]; + switch(j->type) { + case FT_TRUNC0: + break; + case FT_TRUNC1: + j->mode |= 1 << 8; + break; + } + j->type = FT_trunc; + goto create; + case FT_SUMMARY: + case FT_SUMBEG: + return 1 + getc3(&buff[1], &j->seq); + case FT_SUMEND: + return 1; + create: + n += getc3(&buff[n], &j->mtime); + n += getc3(&buff[n], &j->parent); + memmove(j->name, &buff[n], MAXNSIZE+1); + j->name[MAXNSIZE+1] = '\0'; + m = strlen(j->name); + if(m > MAXNSIZE) + return -1; + return n + m + 1; + } + return -1; +} + +int +Jconv(Fmt *fp) +{ + Jrec *j; + + j = va_arg(fp->args, Jrec *); + switch(j->type) { + case FT_create: + case FT_FCREATE0: + case FT_FCREATE1: + case FT_DCREATE0: + case FT_DCREATE1: + return fmtprint(fp, "create f %ld p %ld t %lud m %ulo %s", + j->fnum, j->parent, j->mtime, j->mode, j->name); + case FT_chmod: + case FT_CHMOD0: + case FT_CHMOD1: + return fmtprint(fp, "chmod f %ld m %ulo #%ld", + j->fnum, j->mode, j->mnum); + case FT_REMOVE: + return fmtprint(fp, "remove f %ld", j->fnum); + case FT_WRITE: + return fmtprint(fp, "write f %ld z %ld o %ld t %uld", + j->fnum, j->size, j->offset, j->mtime); + case FT_AWRITE: + return fmtprint(fp, "awrite f %ld z %ld o %ld", + j->fnum, j->size, j->offset); + case FT_trunc: + case FT_TRUNC0: + case FT_TRUNC1: + return fmtprint(fp, "trunc f %ld o %ld p %ld t %ld m %ulo %s", + j->fnum, j->tnum, j->parent, j->mtime, j->mode, j->name); + case FT_SUMMARY: + return fmtprint(fp, "summary %ld", + j->seq); + case FT_SUMBEG: + return fmtprint(fp, "sumbeg %ld", + j->seq); + case FT_SUMEND: + return fmtprint(fp, "end"); + default: + return fmtprint(fp, "?type %d", j->type); + } +} -- cgit v1.2.3