[SPEC2DEF]
[reactos.git] / reactos / tools / spec2def / spec2def.c
index e6433ac..138f39d 100644 (file)
@@ -10,7 +10,7 @@
 typedef struct
 {
     char *pcName;
-    size_t nNameLength;
+    int nNameLength;
     char *pcRedirection;
     int nRedirectionLength;
     int nCallingConvention;
@@ -67,6 +67,7 @@ enum
     ARG_WSTR,
     ARG_DBL,
     ARG_INT64,
+    ARG_INT128,
     ARG_FLOAT
 };
 
@@ -191,7 +192,9 @@ OutputLine_stub(FILE *file, EXPORT *pexp)
             case ARG_PTR:  fprintf(file, "void*"); break;
             case ARG_STR:  fprintf(file, "char*"); break;
             case ARG_WSTR: fprintf(file, "wchar_t*"); break;
-            case ARG_DBL: case ARG_INT64 :  fprintf(file, "__int64"); break;
+            case ARG_DBL:
+            case ARG_INT64 :  fprintf(file, "__int64"); break;
+            case ARG_INT128 :  fprintf(file, "__int128"); break;
             case ARG_FLOAT: fprintf(file, "float"); break;
         }
         fprintf(file, " a%d", i);
@@ -210,6 +213,7 @@ OutputLine_stub(FILE *file, EXPORT *pexp)
             case ARG_WSTR: fprintf(file, "'%%ws'"); break;
             case ARG_DBL:  fprintf(file, "%%f"); break;
             case ARG_INT64: fprintf(file, "%%\"PRix64\""); break;
+            case ARG_INT128: fprintf(file, "%%\"PRix128\""); break;
             case ARG_FLOAT: fprintf(file, "%%f"); break;
         }
     }
@@ -226,6 +230,7 @@ OutputLine_stub(FILE *file, EXPORT *pexp)
             case ARG_WSTR: fprintf(file, "(wchar_t*)a%d", i); break;
             case ARG_DBL:  fprintf(file, "(double)a%d", i); break;
             case ARG_INT64: fprintf(file, "(__int64)a%d", i); break;
+            case ARG_INT128: fprintf(file, "(__int128)a%d", i); break;
             case ARG_FLOAT: fprintf(file, "(float)a%d", i); break;
         }
     }
@@ -301,7 +306,7 @@ OutputHeader_def(FILE *file, char *libname)
 {
     fprintf(file,
             "; File generated automatically, do not edit!\n\n"
-            "LIBRARY %s\n\n"
+            "NAME %s\n\n"
             "EXPORTS\n",
             libname);
 }
@@ -310,7 +315,7 @@ void
 PrintName(FILE *fileDest, EXPORT *pexp, char *pszPrefix, int fRedir, int fDeco)
 {
     char *pcName = fRedir ? pexp->pcRedirection : pexp->pcName;
-    size_t nNameLength = fRedir ? pexp->nRedirectionLength : pexp->nNameLength;
+    int nNameLength = fRedir ? pexp->nRedirectionLength : pexp->nNameLength;
 
     /* Handle autoname */
     if (nNameLength == 1 && pcName[0] == '@')
@@ -600,6 +605,11 @@ ParseFile(char* pcStart, FILE *fileDest, PFNOUTLINE OutputLine)
                     exp.nStackBytes += 8;
                     exp.anArgs[exp.nArgCount] = ARG_INT64;
                 }
+                else if (CompareToken(pc, "int128"))
+                {
+                    exp.nStackBytes += 16;
+                    exp.anArgs[exp.nArgCount] = ARG_INT128;
+                }
                 else if (CompareToken(pc, "float"))
                 {
                     exp.nStackBytes += 4;
@@ -639,10 +649,10 @@ ParseFile(char* pcStart, FILE *fileDest, PFNOUTLINE OutputLine)
             {
                 /* Check for stdcall name */
                 char *p = strchr(pc, '@');
-                if (p && ((size_t)(p - pc) < exp.nNameLength))
+                if (p && (p - pc < exp.nNameLength))
                 {
                     int i;
-                    exp.nNameLength = p - pc;
+                    exp.nNameLength = (int)(p - pc);
                     if (exp.nNameLength < 1)
                     {
                         fprintf(stderr, "error, @ in line %d\n", nLine);
@@ -659,7 +669,8 @@ ParseFile(char* pcStart, FILE *fileDest, PFNOUTLINE OutputLine)
         }
 
         /* Get optional redirection */
-        if ((pc = NextToken(pc)))
+        pc = NextToken(pc);
+        if (pc)
         {
             exp.pcRedirection = pc;
             exp.nRedirectionLength = TokenLength(pc);