diff rvinterf/etmsync/fsbasics.c @ 0:e7502631a0f9

initial import from freecalypso-sw rev 1033:5ab737ac3ad7
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 11 Jun 2016 00:13:35 +0000
parents
children 46ad66a231af
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rvinterf/etmsync/fsbasics.c	Sat Jun 11 00:13:35 2016 +0000
@@ -0,0 +1,96 @@
+/*
+ * Basic FFS2 operations
+ */
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <strings.h>
+#include "etm.h"
+#include "ffs.h"
+#include "tmffs2.h"
+#include "limits.h"
+#include "ffslimits.h"
+#include "localtypes.h"
+#include "localstruct.h"
+#include "exitcodes.h"
+
+extern u_char rvi_msg[];
+extern int rvi_msg_len;
+
+cmd_ffs2ver()
+{
+	u_char cmdpkt[4];
+	int rc;
+
+	cmdpkt[1] = ETM_FFS2;
+	cmdpkt[2] = TMFFS_VERSION;
+	rc = etm_pkt_exch(cmdpkt, 2);
+	if (rc)
+		return(rc);
+	if (rvi_msg[3]) {
+		printf("FFS2 error %d\n", rvi_msg[3]);
+		return(ERROR_TARGET);
+	}
+	if (rvi_msg_len != 7) {
+		printf("error: FFS2 version response has wrong length\n");
+		return(ERROR_TARGET);
+	}
+	printf("FFS2 version: %02X.%02X\n", rvi_msg[5], rvi_msg[4]);
+	return(0);
+}
+
+cmd_ls(argc, argv)
+	char **argv;
+{
+	u_char state[4];
+	char namebuf[256];
+	int nument, i, rc;
+
+	rc = do_opendir(argv[1], state, &nument);
+	if (rc)
+		return(rc);
+	if (!nument) {
+		printf("<empty dir>\n");
+		return(0);
+	}
+	for (i = 0; i < nument; i++) {
+		rc = do_readdir(state, namebuf, sizeof namebuf);
+		if (rc)
+			return(rc);
+		printf("%s\n", namebuf);
+	}
+	return(0);
+}
+
+cmd_stat(argc, argv)
+	char **argv;
+{
+	struct stat_info stat;
+	int rc;
+	char *type;
+
+	rc = do_xlstat(argv[1], &stat);
+	if (rc)
+		return(rc);
+	switch (stat.type) {
+	case OT_FILE:
+		type = "file";
+		break;
+	case OT_DIR:
+		type = "directory";
+		break;
+	case OT_LINK:
+		type = "symlink";
+		break;
+	default:
+		type = "???";
+	}
+	printf("Type: %s%s\n", type,
+		stat.flags & OF_READONLY ? ", read-only" : "");
+	printf("inode %x\n", stat.inode);
+	printf("size %u, space %u\n", stat.size, stat.space);
+	printf("location=%x, block %d\n", stat.location, stat.block);
+	return(0);
+}