From f72e8cd337581aa9fca5c68caacf56c7c3764379 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net>
Date: Sat, 10 Feb 1996 23:06:25 +0100
Subject: [PATCH] fixed sscanf to accept %x %o and %D

Rev: src/opcodes.c:1.4
---
 src/opcodes.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 57 insertions(+)

diff --git a/src/opcodes.c b/src/opcodes.c
index 03358c4512..b713d7dd27 100644
--- a/src/opcodes.c
+++ b/src/opcodes.c
@@ -337,6 +337,45 @@ static INT32 low_sscanf(INT32 num_arg)
     {
       char * t;
 
+      if(eye>=input_len) return matches;
+      sval.u.integer=STRTOL(input+eye,&t,10);
+      if(input + eye == t) return matches;
+      eye=t-input;
+      sval.type=T_INT;
+      sval.subtype=NUMBER_NUMBER;
+      break;
+    }
+
+    case 'x':
+    {
+      char * t;
+
+      if(eye>=input_len) return matches;
+      sval.u.integer=STRTOL(input+eye,&t,16);
+      if(input + eye == t) return matches;
+      eye=t-input;
+      sval.type=T_INT;
+      sval.subtype=NUMBER_NUMBER;
+      break;
+    }
+
+    case 'o':
+    {
+      char * t;
+
+      if(eye>=input_len) return matches;
+      sval.u.integer=STRTOL(input+eye,&t,8);
+      if(input + eye == t) return matches;
+      eye=t-input;
+      sval.type=T_INT;
+      sval.subtype=NUMBER_NUMBER;
+      break;
+    }
+
+    case 'D':
+    {
+      char * t;
+
       if(eye>=input_len) return matches;
       sval.u.integer=STRTOL(input+eye,&t,0);
       if(input + eye == t) return matches;
@@ -403,6 +442,24 @@ static INT32 low_sscanf(INT32 num_arg)
 	    set['-']=0;
 	    goto match_set;
 
+	  case 'o':
+	    for(e=0;e<256;e++) set[e]=1;
+	    for(e='0';e<='7';e++) set[e]=0;
+	    goto match_set;
+
+	  case 'x':
+	    for(e=0;e<256;e++) set[e]=1;
+	    for(e='0';e<='9';e++) set[e]=0;
+	    for(e='a';e<='f';e++) set[e]=0;
+	    goto match_set;
+
+	  case 'D':
+	    for(e=0;e<256;e++) set[e]=1;
+	    for(e='0';e<='9';e++) set[e]=0;
+	    set['-']=0;
+	    set['x']=0;
+	    goto match_set;
+
 	  case 'f':
 	    for(e=0;e<256;e++) set[e]=1;
 	    for(e='0';e<='9';e++) set[e]=0;
-- 
GitLab