summaryrefslogtreecommitdiff
path: root/VP/search-script.cpp
diff options
context:
space:
mode:
authorPixel <Pixel>2002-07-16 10:35:56 +0000
committerPixel <Pixel>2002-07-16 10:35:56 +0000
commit83f8bd40af68bd0e161b93704408b76e904039b8 (patch)
tree3279cbe596af6481e16cc567fcf5a06fa5644195 /VP/search-script.cpp
parent50dbdbd466572928a619554e5c756bd52c415597 (diff)
VePeeeeeeeeee
Diffstat (limited to 'VP/search-script.cpp')
-rw-r--r--VP/search-script.cpp73
1 files changed, 73 insertions, 0 deletions
diff --git a/VP/search-script.cpp b/VP/search-script.cpp
new file mode 100644
index 0000000..263bc49
--- /dev/null
+++ b/VP/search-script.cpp
@@ -0,0 +1,73 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include "fileutils.h"
+#include "generic.h"
+
+#define THRESHOLD 2000
+
+int main(int argc, char ** argv) {
+ int h, n, o, i, p, c, pp, b;
+
+ verbosity = M_INFO;
+
+ if (argc != 2) {
+ printm(M_BARE, "Usage: search-script <file>\n");
+ exit(-1);
+ }
+
+ if ((h = open(argv[1], O_RDONLY)) < 0) {
+ printm(M_ERROR, "Error opening file %s\n", argv[1]);
+ exit(-1);
+ }
+
+ printm(M_STATUS, "Reading informations...\n");
+
+ read(h, &n, 4);
+
+ o = n;
+
+ n -= 4;
+ n /= 8;
+
+ printm(M_INFO, "Script claims to have %i texts.\n", n);
+
+ if (n > THRESHOLD) {
+ printm(M_ERROR, "Too much texts to make sense.\n");
+ exit(-1);
+ }
+
+ printm(M_STATUS, "Reading index.\n");
+
+ pp = -1;
+ for (i = 0; i < n; i++) {
+ lseek(h, i * 8 + 4, SEEK_SET);
+ read(h, &c, 4);
+ read(h, &p, 4);
+ printm(M_INFO, "Index #%i has pointer %i and counter %i\n", i, p, c);
+ if (pp > p) {
+ printm(M_ERROR, "Script's text overlapping.\n");
+ exit(-1);
+ }
+
+ if (((unsigned int)(p + o)) > filesize(h)) {
+ printm(M_ERROR, "Text bigger than script.\n");
+ exit(-1);
+ }
+
+ lseek(h, p + o - 1, SEEK_SET);
+ b = 0;
+ read(h, &b, 1);
+
+ if (b) {
+ printm(M_ERROR, "Byte before the pointer is not 0 (%i = 0x%02x)\n", b, b);
+ exit(-1);
+ }
+
+ pp = p;
+ }
+
+ printm(M_STATUS, "Script seems ok to me.\n");
+
+ exit(0);
+}