diff ffstools/tiffs-rd/object.c @ 233:ae9ff2d1e3da

tiffs IVA: basic ls integrated
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Sun, 26 Jan 2014 10:54:42 +0000
parents
children 024042383a26
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ffstools/tiffs-rd/object.c	Sun Jan 26 10:54:42 2014 +0000
@@ -0,0 +1,58 @@
+/*
+ * This C module implements object-level analysis.
+ */
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <strings.h>
+#include "types.h"
+#include "struct.h"
+#include "globals.h"
+#include "pathname.h"
+
+validate_obj_name(ino, root_special)
+{
+	struct inode_info *inf = inode_info[ino];
+	u8 *p, *endp;
+	int c;
+
+	if (!inf->len)
+		return(0);
+	p = inf->dataptr;
+	endp = p + inf->len;
+	for (; ; p++) {
+		if (p >= endp)
+			return(0);
+		c = *p;
+		if (!c)
+			break;
+		if (c < ' ' || c > '~')
+			return(0);
+		if (root_special || isalnum(c))
+			continue;
+		switch (c) {
+		case '.':
+		case ',':
+		case '_':
+		case '-':
+		case '+':
+		case '%':
+		case '$':
+		case '#':
+			continue;
+		default:
+			return(0);
+		}
+	}
+	if (!root_special) {
+		c = p - inf->dataptr;
+		if (c < 1 || c > MAX_FN_COMPONENT)
+			return(0);
+		if (!strcmp(inf->dataptr, ".") || !strcmp(inf->dataptr, ".."))
+			return(0);
+	}
+	inf->byte_after_name = p + 1;
+	return(1);
+}