aboutsummaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/file/file/ge-le.patch
blob: 7b7d8b60a4e9287f77f44d03f26654fcf90aa2a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
`>=' and `<=' was silently ignored in previous version,
but causes an warning in file 5.04. Add support for these
two operators as a feature extension, however, users should
not rely on them.

8/17/2010 - created by Qing He <qing.he@intel.com>

diff --git a/src/apprentice.c b/src/apprentice.c
index 3d4c3cf..a2b86ed 100644
--- a/src/apprentice.c
+++ b/src/apprentice.c
@@ -1396,11 +1396,10 @@ parse(struct magic_set *ms, struct magic_entry **mentryp, uint32_t *nmentryp,
   		m->reln = *l;
   		++l;
 		if (*l == '=') {
-			if (ms->flags & MAGIC_CHECK) {
-				file_magwarn(ms, "%c= not supported",
-				    m->reln);
-				return -1;
-			}
+		    if (m->reln == '>')
+			m->reln = 'g';
+		    else if (m->reln == '<')
+			m->reln = 'l';
 		   ++l;
 		}
 		break;
diff --git a/src/softmagic.c b/src/softmagic.c
index d8a5675..1648e43 100644
--- a/src/softmagic.c
+++ b/src/softmagic.c
@@ -1955,6 +1955,38 @@ magiccheck(struct magic_set *ms, struct magic *m)
 		}
 		break;
 
+	case 'g':
+		if (m->flag & UNSIGNED) {
+			matched = v >= l;
+			if ((ms->flags & MAGIC_DEBUG) != 0)
+				(void) fprintf(stderr, "%llu >= %llu = %d\n",
+				    (unsigned long long)v,
+				    (unsigned long long)l, matched);
+		}
+		else {
+			matched = (int64_t) v >= (int64_t) l;
+			if ((ms->flags & MAGIC_DEBUG) != 0)
+				(void) fprintf(stderr, "%lld >= %lld = %d\n",
+				    (long long)v, (long long)l, matched);
+		}
+		break;
+
+	case 'l':
+		if (m->flag & UNSIGNED) {
+			matched = v <= l;
+			if ((ms->flags & MAGIC_DEBUG) != 0)
+				(void) fprintf(stderr, "%llu <= %llu = %d\n",
+				    (unsigned long long)v,
+				    (unsigned long long)l, matched);
+		}
+		else {
+			matched = (int64_t) v <= (int64_t) l;
+			if ((ms->flags & MAGIC_DEBUG) != 0)
+				(void) fprintf(stderr, "%lld <= %lld = %d\n",
+				       (long long)v, (long long)l, matched);
+		}
+		break;
+
 	case '&':
 		matched = (v & l) == l;
 		if ((ms->flags & MAGIC_DEBUG) != 0)