Implement adding new sections/lines/fields and writing the resulting file
Modified: trunk/reactos/lib/inflib/builddep.h
Modified: trunk/reactos/lib/inflib/infcommon.h
Modified: trunk/reactos/lib/inflib/infcore.c
Modified: trunk/reactos/lib/inflib/infget.c
Modified: trunk/reactos/lib/inflib/infhost.h
Modified: trunk/reactos/lib/inflib/infhostgen.c
Modified: trunk/reactos/lib/inflib/infhostget.c
Added: trunk/reactos/lib/inflib/infhostglue.c
Added: trunk/reactos/lib/inflib/infhostput.c
Modified: trunk/reactos/lib/inflib/inflib.h
Modified: trunk/reactos/lib/inflib/inflib.mak
Modified: trunk/reactos/lib/inflib/inflib.xml
Modified: trunk/reactos/lib/inflib/infpriv.h
Added: trunk/reactos/lib/inflib/infput.c
Modified: trunk/reactos/lib/inflib/infros.h
Modified: trunk/reactos/lib/inflib/infrosgen.c
Modified: trunk/reactos/lib/inflib/infrosget.c
Added: trunk/reactos/lib/inflib/infrosput.c

Modified: trunk/reactos/lib/inflib/builddep.h
--- trunk/reactos/lib/inflib/builddep.h	2005-11-25 21:29:16 UTC (rev 19571)
+++ trunk/reactos/lib/inflib/builddep.h	2005-11-25 21:37:23 UTC (rev 19572)
@@ -1,18 +1,21 @@
 /*
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         .inf file parser
- * FILE:            lib/inflib/builddep.h
- * PURPOSE:         Build dependent definitions
- * PROGRAMMER:      Ge van Geldorp <gvg@reactos.org>
+ * PROJECT:   .inf file parser
+ * LICENSE:   GPL - See COPYING in the top level directory
+ * COPYRIGHT: Copyright 2005 Ge van Geldorp <gvg@reactos.org>
  */
 
 #ifdef INFLIB_HOST
 
 /* Definitions native to the host on which we're building */
 
+#include <stdarg.h>
+#include <stdio.h>
 #include <string.h>
 #include <errno.h>
 
+#define FALSE 0
+#define TRUE  1
+
 #define FREE(Area) free(Area)
 #define MALLOC(Size) malloc(Size)
 #define ZEROMEMORY(Area, Size) memset((Area), '\0', (Size))
@@ -39,6 +42,7 @@
 #define _tcscpy strcpy
 #define _tcstoul strtoul
 #define _tcstol strtol
+#define STRFMT "%s"
 
 extern void DbgPrint(const char *Fmt, ...);
 
@@ -68,6 +72,8 @@
 #define INF_STATUS_BUFFER_OVERFLOW   STATUS_BUFFER_OVERFLOW
 #define INF_SUCCESS(x) (0 <= (x))
 
+#define STRFMT "%S"
+
 #endif /* INFLIB_HOST */
 
 typedef const TCHAR *PCTSTR;

Modified: trunk/reactos/lib/inflib/infcommon.h
--- trunk/reactos/lib/inflib/infcommon.h	2005-11-25 21:29:16 UTC (rev 19571)
+++ trunk/reactos/lib/inflib/infcommon.h	2005-11-25 21:37:23 UTC (rev 19572)
@@ -1,11 +1,9 @@
 /*
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         .inf file parser
- * FILE:            lib/inflib/infcommon.h
- * PURPOSE:         Public .inf routines
- * PROGRAMMER:      Royce Mitchell III
- *                  Eric Kohl
- *                  Ge van Geldorp
+ * PROJECT:    .inf file parser
+ * LICENSE:    GPL - See COPYING in the top level directory
+ * PROGRAMMER: Royce Mitchell III
+ *             Eric Kohl
+ *             Ge van Geldorp <gvg@reactos.org>
  */
 
 #ifndef INFCOMMON_H_INCLUDED

Modified: trunk/reactos/lib/inflib/infcore.c
--- trunk/reactos/lib/inflib/infcore.c	2005-11-25 21:29:16 UTC (rev 19571)
+++ trunk/reactos/lib/inflib/infcore.c	2005-11-25 21:37:23 UTC (rev 19572)
@@ -1,11 +1,9 @@
 /*
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         .inf file parser
- * FILE:            lib/inflib/infcore.c
- * PURPOSE:         INF file parser that caches contents of INF file in memory
- * PROGRAMMER:      Royce Mitchell III
- *                  Eric Kohl
- *                  Ge van Geldorp
+ * PROJECT:    .inf file parser
+ * LICENSE:    GPL - See COPYING in the top level directory
+ * PROGRAMMER: Royce Mitchell III
+ *             Eric Kohl
+ *             Ge van Geldorp <gvg@reactos.org>
  */
 
 /* INCLUDES *****************************************************************/
@@ -85,7 +83,7 @@
 /* PRIVATE FUNCTIONS ********************************************************/
 
 static PINFCACHELINE
-InfpCacheFreeLine (PINFCACHELINE Line)
+InfpFreeLine (PINFCACHELINE Line)
 {
   PINFCACHELINE Next;
   PINFCACHEFIELD Field;
@@ -118,7 +116,7 @@
 
 
 PINFCACHESECTION
-InfpCacheFreeSection (PINFCACHESECTION Section)
+InfpFreeSection (PINFCACHESECTION Section)
 {
   PINFCACHESECTION Next;
 
@@ -131,7 +129,7 @@
   Next = Section->Next;
   while (Section->FirstLine != NULL)
     {
-      Section->FirstLine = InfpCacheFreeLine (Section->FirstLine);
+      Section->FirstLine = InfpFreeLine (Section->FirstLine);
     }
   Section->LastLine = NULL;
 
@@ -141,9 +139,9 @@
 }
 
 
-static PINFCACHESECTION
-InfpCacheFindSection (PINFCACHE Cache,
-		      PCTSTR Name)
+PINFCACHESECTION
+InfpFindSection(PINFCACHE Cache,
+                PCTSTR Name)
 {
   PINFCACHESECTION Section = NULL;
 
@@ -157,9 +155,9 @@
   while (Section != NULL)
     {
       if (_tcsicmp (Section->Name, Name) == 0)
-	{
-	  return Section;
-	}
+        {
+          return Section;
+        }
 
       /* get the next section*/
       Section = Section->Next;
@@ -169,9 +167,9 @@
 }
 
 
-static PINFCACHESECTION
-InfpCacheAddSection (PINFCACHE Cache,
-		     PTCHAR Name)
+PINFCACHESECTION
+InfpAddSection(PINFCACHE Cache,
+               PCTSTR Name)
 {
   PINFCACHESECTION Section = NULL;
   ULONG Size;
@@ -213,8 +211,8 @@
 }
 
 
-static PINFCACHELINE
-InfpCacheAddLine (PINFCACHESECTION Section)
+PINFCACHELINE
+InfpAddLine(PINFCACHESECTION Section)
 {
   PINFCACHELINE Line;
 
@@ -251,37 +249,47 @@
 }
 
 
-static PVOID
-InfpAddKeyToLine (PINFCACHELINE Line,
-		  PTCHAR Key)
+PVOID
+InfpAddKeyToLine(PINFCACHELINE Line,
+                 PCTSTR Key)
 {
   if (Line == NULL)
-    return NULL;
+    {
+      DPRINT1("Invalid Line\n");
+      return NULL;
+    }
 
   if (Line->Key != NULL)
-    return NULL;
+    {
+      DPRINT1("Line already has a key\n");
+      return NULL;
+    }
 
-  Line->Key = (PTCHAR)MALLOC ((_tcslen (Key) + 1) * sizeof(TCHAR));
+  Line->Key = (PTCHAR)MALLOC((_tcslen(Key) + 1) * sizeof(TCHAR));
   if (Line->Key == NULL)
-    return NULL;
+    {
+      DPRINT1("MALLOC() failed\n");
+      return NULL;
+    }
 
-  _tcscpy (Line->Key, Key);
+  _tcscpy(Line->Key, Key);
 
   return (PVOID)Line->Key;
 }
 
 
-static PVOID
-InfpAddFieldToLine (PINFCACHELINE Line,
-		    PTCHAR Data)
+PVOID
+InfpAddFieldToLine(PINFCACHELINE Line,
+                   PCTSTR Data)
 {
   PINFCACHEFIELD Field;
   ULONG Size;
 
   Size = sizeof(INFCACHEFIELD) + (_tcslen(Data) * sizeof(TCHAR));
-  Field = (PINFCACHEFIELD)MALLOC (Size);
+  Field = (PINFCACHEFIELD)MALLOC(Size);
   if (Field == NULL)
     {
+      DPRINT1("MALLOC() failed\n");
       return NULL;
     }
   ZEROMEMORY (Field,
@@ -307,8 +315,8 @@
 
 
 PINFCACHELINE
-InfpCacheFindKeyLine (PINFCACHESECTION Section,
-		      PTCHAR Key)
+InfpFindKeyLine(PINFCACHESECTION Section,
+                PCTSTR Key)
 {
   PINFCACHELINE Line;
 
@@ -316,9 +324,9 @@
   while (Line != NULL)
     {
       if (Line->Key != NULL && _tcsicmp (Line->Key, Key) == 0)
-	{
-	  return Line;
-	}
+        {
+          return Line;
+        }
 
       Line = Line->Next;
     }
@@ -363,9 +371,9 @@
 inline static int is_eol( struct parser *parser, const CHAR *ptr )
 {
   return (ptr >= parser->end ||
-	  *ptr == CONTROL_Z ||
-	  *ptr == '\n' ||
-	  (*ptr == '\r' && *(ptr + 1) == '\n'));
+          *ptr == CONTROL_Z ||
+          *ptr == '\n' ||
+          (*ptr == '\r' && *(ptr + 1) == '\n'));
 }
 
 
@@ -401,18 +409,18 @@
       return NULL;
     }
 
-  Section = InfpCacheFindSection (parser->file,
-				  parser->token);
+  Section = InfpFindSection(parser->file,
+                            parser->token);
   if (Section == NULL)
     {
       /* need to create a new one */
-      Section= InfpCacheAddSection (parser->file,
-				    parser->token);
+      Section= InfpAddSection(parser->file,
+                              parser->token);
       if (Section == NULL)
-	{
-	  parser->error = INF_STATUS_NOT_ENOUGH_MEMORY;
-	  return NULL;
-	}
+        {
+          parser->error = INF_STATUS_NOT_ENOUGH_MEMORY;
+          return NULL;
+        }
     }
 
   parser->token_len = 0;
@@ -430,14 +438,14 @@
   if (!parser->line)  /* need to start a new line */
     {
       if (parser->cur_section == NULL)  /* got a line before the first section */
-	{
-	  parser->error = INF_STATUS_WRONG_INF_STYLE;
-	  return NULL;
-	}
+        {
+          parser->error = INF_STATUS_WRONG_INF_STYLE;
+          return NULL;
+        }
 
-      parser->line = InfpCacheAddLine (parser->cur_section);
+      parser->line = InfpAddLine(parser->cur_section);
       if (parser->line == NULL)
-	goto error;
+        goto error;
     }
   else
     {
@@ -481,34 +489,34 @@
   for (p = pos; !is_eof( parser, p ); p++)
     {
       switch(*p)
-	{
-	  case '\r':
-	    continue;
+        {
+          case '\r':
+            continue;
 
-	  case '\n':
-	    parser->line_pos++;
-	    close_current_line( parser );
-	    break;
+          case '\n':
+            parser->line_pos++;
+            close_current_line( parser );
+            break;
 
-	  case ';':
-	    push_state( parser, LINE_START );
-	    set_state( parser, COMMENT );
-	    return p + 1;
+          case ';':
+            push_state( parser, LINE_START );
+            set_state( parser, COMMENT );
+            return p + 1;
 
-	  case '[':
-	    parser->start = p + 1;
-	    set_state( parser, SECTION_NAME );
-	    return p + 1;
+          case '[':
+            parser->start = p + 1;
+            set_state( parser, SECTION_NAME );
+            return p + 1;
 
-	  default:
-	    if (!isspace(*p))
-	      {
-		parser->start = p;
-		set_state( parser, KEY_NAME );
-		return p;
-	      }
-	    break;
-	}
+          default:
+            if (!isspace(*p))
+              {
+                parser->start = p;
+                set_state( parser, KEY_NAME );
+                return p;
+              }
+            break;
+        }
     }
   close_current_line( parser );
   return NULL;
@@ -523,14 +531,14 @@
   for (p = pos; !is_eol( parser, p ); p++)
     {
       if (*p == ']')
-	{
-	  push_token( parser, p );
-	  if (add_section_from_token( parser ) == NULL)
-	    return NULL;
-	  push_state( parser, LINE_START );
-	  set_state( parser, COMMENT );  /* ignore everything else on the line */
-	  return p + 1;
-	}
+        {
+          push_token( parser, p );
+          if (add_section_from_token( parser ) == NULL)
+            return NULL;
+          push_state( parser, LINE_START );
+          set_state( parser, COMMENT );  /* ignore everything else on the line */
+          return p + 1;
+        }
     }
   parser->error = INF_STATUS_BAD_SECTION_NAME_LINE; /* unfinished section name */
   return NULL;
@@ -652,31 +660,31 @@
   for (p = pos; !is_eof( parser, p ); p++)
     {
       switch(*p)
-	{
-	  case '\r':
-	    continue;
+        {
+          case '\r':
+            continue;
 
-	  case '\n':
-	    parser->line_pos++;
-	    parser->start = p + 1;
-	    set_state( parser, LEADING_SPACES );
-	    return p + 1;
+          case '\n':
+            parser->line_pos++;
+            parser->start = p + 1;
+            set_state( parser, LEADING_SPACES );
+            return p + 1;
 
-	  case '\\':
-	    continue;
+          case '\\':
+            continue;
 
-	  case ';':
-	    push_state( parser, EOL_BACKSLASH );
-	    set_state( parser, COMMENT );
-	    return p + 1;
+          case ';':
+            push_state( parser, EOL_BACKSLASH );
+            set_state( parser, COMMENT );
+            return p + 1;
 
-	  default:
-	    if (isspace(*p))
-	      continue;
-	    push_token( parser, p );
-	    pop_state( parser );
-	    return p;
-	}
+          default:
+            if (isspace(*p))
+              continue;
+            push_token( parser, p );
+            pop_state( parser );
+            return p;
+        }
     }
   parser->start = p;
   pop_state( parser );
@@ -693,21 +701,21 @@
   for (p = pos; !is_eol( parser, p ); p++)
     {
       if (*p == '"')
-	{
-	  if (p+1 < parser->end && p[1] == '"')  /* double quotes */
-	    {
-	      push_token( parser, p + 1 );
-	      parser->start = token_end = p + 2;
-	      p++;
-	    }
-	  else  /* end of quotes */
-	    {
-	      push_token( parser, p );
-	      parser->start = p + 1;
-	      pop_state( parser );
-	      return p + 1;
-	    }
-	}
+        {
+          if (p+1 < parser->end && p[1] == '"')  /* double quotes */
+            {
+              push_token( parser, p + 1 );
+              parser->start = token_end = p + 2;
+              p++;
+            }
+          else  /* end of quotes */
+            {
+              push_token( parser, p );
+              parser->start = p + 1;
+              pop_state( parser );
+              return p + 1;
+            }
+        }
     }
   push_token( parser, p );
   pop_state( parser );
@@ -723,13 +731,13 @@
   for (p = pos; !is_eol( parser, p ); p++)
     {
       if (*p == '\\')
-	{
-	  parser->start = p;
-	  set_state( parser, EOL_BACKSLASH );
-	  return p;
-	}
+        {
+          parser->start = p;
+          set_state( parser, EOL_BACKSLASH );
+          return p;
+        }
       if (!isspace(*p))
-	break;
+        break;
     }
   parser->start = p;
   pop_state( parser );
@@ -745,12 +753,12 @@
   for (p = pos; !is_eol( parser, p ); p++)
     {
       if (*p == '\\')
-	{
-	  set_state( parser, EOL_BACKSLASH );
-	  return p;
-	}
+        {
+          set_state( parser, EOL_BACKSLASH );
+          return p;
+        }
       if (!isspace(*p))
-	break;
+        break;
     }
   pop_state( parser );
   return p;
@@ -772,9 +780,9 @@
 /* parse a complete buffer */
 INFSTATUS
 InfpParseBuffer (PINFCACHE file,
-		 const CHAR *buffer,
-		 const CHAR *end,
-		 PULONG error_line)
+                 const CHAR *buffer,
+                 const CHAR *end,
+                 PULONG error_line)
 {
   struct parser parser;
   const CHAR *pos = buffer;
@@ -797,13 +805,13 @@
   if (parser.error)
     {
       if (error_line)
-	*error_line = parser.line_pos;
+        *error_line = parser.line_pos;
       return parser.error;
     }
 
   /* find the [strings] section */
-  file->StringsSection = InfpCacheFindSection (file,
-					       _T("Strings"));
+  file->StringsSection = InfpFindSection(file,
+                                         _T("Strings"));
 
   return INF_STATUS_SUCCESS;
 }

Modified: trunk/reactos/lib/inflib/infget.c
--- trunk/reactos/lib/inflib/infget.c	2005-11-25 21:29:16 UTC (rev 19571)
+++ trunk/reactos/lib/inflib/infget.c	2005-11-25 21:37:23 UTC (rev 19572)
@@ -1,11 +1,9 @@
 /*
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         .inf file parser
- * FILE:            lib/inflib/infrosget.c
- * PURPOSE:         Read .inf routines for use in ReactOS
- * PROGRAMMER:      Royce Mitchell III
- *                  Eric Kohl
- *                  Ge van Geldorp
+ * PROJECT:    .inf file parser
+ * LICENSE:    GPL - See COPYING in the top level directory
+ * PROGRAMMER: Royce Mitchell III
+ *             Eric Kohl
+ *             Ge van Geldorp <gvg@reactos.org>
  */
 
 /* INCLUDES *****************************************************************/
@@ -17,65 +15,53 @@
 
 
 INFSTATUS
-InfpFindFirstLine(HINF InfHandle,
+InfpFindFirstLine(PINFCACHE Cache,
                   PCTSTR Section,
                   PCTSTR Key,
                   PINFCONTEXT *Context)
 {
-  PINFCACHE Cache;
   PINFCACHESECTION CacheSection;
   PINFCACHELINE CacheLine;
 
-  if (InfHandle == NULL || Section == NULL || Context == NULL)
+  if (Cache == NULL || Section == NULL || Context == NULL)
     {
-      DPRINT("Invalid parameter\n");
+      DPRINT1("Invalid parameter\n");
       return INF_STATUS_INVALID_PARAMETER;
     }
 
-  *Context = MALLOC(sizeof(INFCONTEXT));
-  if (NULL == *Context)
+  CacheSection = InfpFindSection(Cache, Section);
+  if (NULL == CacheSection)
     {
-      DPRINT1("MALLOC() failed\n");
-      return INF_STATUS_NO_MEMORY;
+      DPRINT("Section not found\n");
+      return INF_STATUS_NOT_FOUND;
     }
 
-  Cache = (PINFCACHE)InfHandle;
+  if (Key != NULL)
+    {
+      CacheLine = InfpFindKeyLine(CacheSection, Key);
+    }
+  else
+    {
+      CacheLine = CacheSection->FirstLine;
+    }
 
-  /* Iterate through list of sections */
-  CacheSection = Cache->FirstSection;
-  while (CacheSection != NULL)
+  if (NULL == CacheLine)
     {
-      DPRINT("Comparing '%S' and '%S'\n", CacheSection->Name, Section);
+      DPRINT("Key not found\n");
+      return INF_STATUS_NOT_FOUND;
+    }
 
-      /* Are the section names the same? */
-      if (_tcsicmp(CacheSection->Name, Section) == 0)
-        {
-          if (Key != NULL)
-            {
-              CacheLine = InfpCacheFindKeyLine (CacheSection, (PTCHAR)Key);
-            }
-          else
-            {
-              CacheLine = CacheSection->FirstLine;
-            }
-
-          if (CacheLine == NULL)
-            return INF_STATUS_NOT_FOUND;
-
-          (*Context)->Inf = (PVOID)Cache;
-          (*Context)->Section = (PVOID)CacheSection;
-          (*Context)->Line = (PVOID)CacheLine;
-
-          return INF_STATUS_SUCCESS;
-        }
-
-      /* Get the next section */
-      CacheSection = CacheSection->Next;
+  *Context = MALLOC(sizeof(INFCONTEXT));
+  if (NULL == *Context)
+    {
+      DPRINT1("MALLOC() failed\n");
+      return INF_STATUS_NO_MEMORY;
     }
+  (*Context)->Inf = (PVOID)Cache;
+  (*Context)->Section = (PVOID)CacheSection;
+  (*Context)->Line = (PVOID)CacheLine;
 
-  DPRINT("Section not found\n");
-
-  return INF_STATUS_NOT_FOUND;
+  return INF_STATUS_SUCCESS;
 }
 
 

Modified: trunk/reactos/lib/inflib/infhost.h
--- trunk/reactos/lib/inflib/infhost.h	2005-11-25 21:29:16 UTC (rev 19571)
+++ trunk/reactos/lib/inflib/infhost.h	2005-11-25 21:37:23 UTC (rev 19572)
@@ -1,16 +1,18 @@
 /*
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         .inf file parser
- * FILE:            lib/inflib/infros.h
- * PURPOSE:         Public .inf routines for use on the host build system
- * PROGRAMMER:      Royce Mitchell III
- *                  Eric Kohl
- *                  Ge van Geldorp
+ * PROJECT:    .inf file parser
+ * LICENSE:    GPL - See COPYING in the top level directory
+ * PROGRAMMER: Royce Mitchell III
+ *             Eric Kohl
+ *             Ge van Geldorp <gvg@reactos.org>
  */
 
 #ifndef INFHOST_H_INCLUDED
 #define INFHOST_H_INCLUDED
 
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
 #include <infcommon.h>
 
 extern int InfHostOpenBufferedFile(PHINF InfHandle,
@@ -18,8 +20,11 @@
                                    unsigned long BufferSize,
                                    unsigned long *ErrorLine);
 extern int InfHostOpenFile(PHINF InfHandle,
-                           char *FileName,
+                           const char *FileName,
                            unsigned long *ErrorLine);
+extern int InfHostWriteFile(HINF InfHandle,
+                            const char *FileName,
+                            const char *HeaderComment);
 extern void InfHostCloseFile(HINF InfHandle);
 extern int InfHostFindFirstLine(HINF InfHandle,
                                 const char *Section,
@@ -60,8 +65,17 @@
 extern int InfHostGetDataField(PINFCONTEXT Context,
                                unsigned long FieldIndex,
                                char **Data);
-extern VOID InfHostFreeContext(PINFCONTEXT Context);
+extern int InfHostFindOrAddSection(HINF InfHandle,
+                                   const char *Section,
+                                   PINFCONTEXT *Context);
+extern int InfHostAddLine(PINFCONTEXT Context, const char *Key);
+extern int InfHostAddField(PINFCONTEXT Context, const char *Data);
+extern void InfHostFreeContext(PINFCONTEXT Context);
 
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
 #endif /* INFROS_H_INCLUDED */
 
 /* EOF */

Modified: trunk/reactos/lib/inflib/infhostgen.c
--- trunk/reactos/lib/inflib/infhostgen.c	2005-11-25 21:29:16 UTC (rev 19571)
+++ trunk/reactos/lib/inflib/infhostgen.c	2005-11-25 21:37:23 UTC (rev 19572)
@@ -1,17 +1,13 @@
 /*
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         .inf file parser
- * FILE:            lib/inflib/infhostgen.c
- * PURPOSE:         General .inf routines for use on the host build system
- * PROGRAMMER:      Royce Mitchell III
- *                  Eric Kohl
- *                  Ge van Geldorp
+ * PROJECT:    .inf file parser
+ * LICENSE:    GPL - See COPYING in the top level directory
+ * PROGRAMMER: Royce Mitchell III
+ *             Eric Kohl
+ *             Ge van Geldorp <gvg@reactos.org>
  */
 
 /* INCLUDES *****************************************************************/
 
-#include <stdio.h>
-#include <errno.h>
 #include "inflib.h"
 #include "infhost.h"
 
@@ -50,7 +46,7 @@
   Cache = (PINFCACHE)MALLOC(sizeof(INFCACHE));
   if (Cache == NULL)
     {
-      DPRINT("MALLOC() failed\n");
+      DPRINT1("MALLOC() failed\n");
       FREE(FileBuffer);
       return(INF_STATUS_INSUFFICIENT_RESOURCES);
     }
@@ -81,7 +77,7 @@
 
 int
 InfHostOpenFile(PHINF InfHandle,
-                char *FileName,
+                const char *FileName,
                 unsigned long *ErrorLine)
 {
   FILE *File;
@@ -97,7 +93,7 @@
   File = fopen(FileName, "rb");
   if (NULL == File)
     {
-      DPRINT("fopen() failed (errno %d)\n", errno);
+      DPRINT1("fopen() failed (errno %d)\n", errno);
       return -1;
     }
 
@@ -106,7 +102,7 @@
   /* Query file size */
   if (fseek(File, 0, SEEK_END))
     {
-      DPRINT("fseek() to EOF failed (errno %d)\n", errno);
+      DPRINT1("fseek() to EOF failed (errno %d)\n", errno);
       fclose(File);
       return -1;
     }
@@ -114,7 +110,7 @@
   FileLength = ftell(File);
   if ((unsigned long) -1 == FileLength)
     {
-      DPRINT("ftell() failed (errno %d)\n", errno);
+      DPRINT1("ftell() failed (errno %d)\n", errno);
       fclose(File);
       return -1;
     }
@@ -123,7 +119,7 @@
   /* Rewind */
   if (fseek(File, 0, SEEK_SET))
     {
-      DPRINT("fseek() to BOF failed (errno %d)\n", errno);
+      DPRINT1("fseek() to BOF failed (errno %d)\n", errno);
       fclose(File);
       return -1;
     }
@@ -140,7 +136,7 @@
   /* Read file */
   if (FileLength != fread(FileBuffer, 1, FileLength, File))
     {
-      DPRINT("fread() failed (errno %d)\n", errno);
+      DPRINT1("fread() failed (errno %d)\n", errno);
       fclose(File);
       return -1;
     }
@@ -154,7 +150,7 @@
   Cache = (PINFCACHE)MALLOC(sizeof(INFCACHE));
   if (Cache == NULL)
     {
-      DPRINT("MALLOC() failed\n");
+      DPRINT1("MALLOC() failed\n");
       FREE(FileBuffer);
       return -1;
     }
@@ -197,7 +193,7 @@
 
   while (Cache->FirstSection != NULL)
     {
-      Cache->FirstSection = InfpCacheFreeSection(Cache->FirstSection);
+      Cache->FirstSection = InfpFreeSection(Cache->FirstSection);
     }
   Cache->LastSection = NULL;
 

Modified: trunk/reactos/lib/inflib/infhostget.c
--- trunk/reactos/lib/inflib/infhostget.c	2005-11-25 21:29:16 UTC (rev 19571)
+++ trunk/reactos/lib/inflib/infhostget.c	2005-11-25 21:37:23 UTC (rev 19572)
@@ -1,16 +1,13 @@
 /*
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         .inf file parser
- * FILE:            lib/inflib/infrosget.c
- * PURPOSE:         Read .inf routines for use on the host build system
- * PROGRAMMER:      Royce Mitchell III
- *                  Eric Kohl
- *                  Ge van Geldorp
+ * PROJECT:    .inf file parser
+ * LICENSE:    GPL - See COPYING in the top level directory
+ * PROGRAMMER: Royce Mitchell III
+ *             Eric Kohl
+ *             Ge van Geldorp <gvg@reactos.org>
  */
 
 /* INCLUDES *****************************************************************/
 
-#include <errno.h>
 #include "inflib.h"
 #include "infhost.h"
 

Added: trunk/reactos/lib/inflib/infhostglue.c
--- trunk/reactos/lib/inflib/infhostglue.c	2005-11-25 21:29:16 UTC (rev 19571)
+++ trunk/reactos/lib/inflib/infhostglue.c	2005-11-25 21:37:23 UTC (rev 19572)
@@ -0,0 +1,24 @@
+/*
+ * PROJECT:   .inf file parser
+ * LICENSE:   GPL - See COPYING in the top level directory
+ * COPYRIGHT: Copyright 2005 Ge van Geldorp <gvg@reactos.org>
+ */
+
+/* INCLUDES *****************************************************************/
+
+#include "inflib.h"
+
+#define NDEBUG
+#include <debug.h>
+
+void
+DbgPrint(const char *Fmt, ...)
+{
+  va_list Args;
+
+  va_start(Args, Fmt);
+  vfprintf(stderr, Fmt, Args);
+  va_end(Args);
+}
+
+/* EOF */
Property changes on: trunk/reactos/lib/inflib/infhostglue.c
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Added: trunk/reactos/lib/inflib/infhostput.c
--- trunk/reactos/lib/inflib/infhostput.c	2005-11-25 21:29:16 UTC (rev 19571)
+++ trunk/reactos/lib/inflib/infhostput.c	2005-11-25 21:37:23 UTC (rev 19572)
@@ -0,0 +1,114 @@
+/*
+ * PROJECT:    .inf file parser
+ * LICENSE:    GPL - See COPYING in the top level directory
+ * COPYRIGHT:  Copyright 2005 Ge van Geldorp <gvg@reactos.org>
+ */
+
+/* INCLUDES *****************************************************************/
+
+#include "inflib.h"
+#include "infhost.h"
+
+#define NDEBUG
+#include <debug.h>
+
+int
+InfHostWriteFile(HINF InfHandle, const char *FileName,
+                 const char *HeaderComment)
+{
+  char *Buffer;
+  unsigned long BufferSize;
+  INFSTATUS Status;
+  FILE *File;
+
+  Status = InfpBuildFileBuffer((PINFCACHE) InfHandle, &Buffer, &BufferSize);
+  if (! INF_SUCCESS(Status))
+    {
+      errno = Status;
+      return -1;
+    }
+
+  File = fopen(FileName, "wb");
+  if (NULL == File)
+    {
+      FREE(Buffer);
+      DPRINT1("fopen() failed (errno %d)\n", errno);
+      return -1;
+    }
+
+  DPRINT("fopen() successful\n");
+
+  if (NULL != HeaderComment && '\0' != *HeaderComment)
+    {
+      fprintf(File, "; %s\r\n\r\n", HeaderComment);
+    }
+
+  if (BufferSize != fwrite(Buffer, 1, BufferSize, File))
+    {
+      DPRINT1("fwrite() failed (errno %d)\n", errno);
+      fclose(File);
+      FREE(Buffer);
+      return -1;
+    }
+
+  fclose(File);
+
+  FREE(Buffer);
+
+  return 0;
+}
+
+int
+InfHostFindOrAddSection(HINF InfHandle,
+                        const char *Section,
+                        PINFCONTEXT *Context)
+{
+  INFSTATUS Status;
+
+  Status = InfpFindOrAddSection((PINFCACHE) InfHandle, Section, Context);
+  if (INF_SUCCESS(Status))
+    {
+      return 0;
+    }
+  else
+    {
+      errno = Status;
+      return -1;
+    }
+}
+
+int
+InfHostAddLine(PINFCONTEXT Context, const char *Key)
+{
+  INFSTATUS Status;
+
+  Status = InfpAddLineWithKey(Context, Key);
+  if (INF_SUCCESS(Status))
+    {
+      return 0;
+    }
+  else
+    {
+      errno = Status;
+      return -1;
+    }
+}
+
+int
[truncated at 1000 lines; 732 more skipped]