summaryrefslogtreecommitdiff
path: root/sys/src/cmd/aux/flashfs/conv.c
diff options
context:
space:
mode:
authorTaru Karttunen <taruti@taruti.net>2011-03-30 15:46:40 +0300
committerTaru Karttunen <taruti@taruti.net>2011-03-30 15:46:40 +0300
commite5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch)
treed8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/cmd/aux/flashfs/conv.c
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/cmd/aux/flashfs/conv.c')
-rwxr-xr-xsys/src/cmd/aux/flashfs/conv.c211
1 files changed, 211 insertions, 0 deletions
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 <u.h>
+#include <libc.h>
+#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);
+ }
+}