Alexandre Julliard : makedep: Add a helper function to replace a file name extension.

Alexandre Julliard julliard at winehq.org
Wed Oct 16 14:25:49 CDT 2013


Module: wine
Branch: master
Commit: c9a4cc6ab7a3d2728bbc7fa19ebbf6a73f72aa6e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c9a4cc6ab7a3d2728bbc7fa19ebbf6a73f72aa6e

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Oct 15 20:29:09 2013 +0200

makedep: Add a helper function to replace a file name extension.

---

 tools/makedep.c |   47 ++++++++++++++++++++++++-----------------------
 1 files changed, 24 insertions(+), 23 deletions(-)

diff --git a/tools/makedep.c b/tools/makedep.c
index fb6b929..ea23318 100644
--- a/tools/makedep.c
+++ b/tools/makedep.c
@@ -250,6 +250,18 @@ static char *get_extension( char *filename )
 
 
 /*******************************************************************
+ *         replace_extension
+ */
+static char *replace_extension( const char *name, unsigned int old_len, const char *new_ext )
+{
+    char *ret = xmalloc( strlen( name ) + strlen( new_ext ) + 1 );
+    strcpy( ret, name );
+    strcpy( ret + strlen( ret ) - old_len, new_ext );
+    return ret;
+}
+
+
+/*******************************************************************
  *         get_line
  */
 static char *get_line( FILE *file )
@@ -452,10 +464,8 @@ static FILE *open_include_file( struct incl_file *pFile )
 
     if (strendswith( pFile->name, ".tab.h" ))
     {
-        if (src_dir)
-            filename = strmake( "%s/%.*s.y", src_dir, strlen(pFile->name) - 6, pFile->name );
-        else
-            filename = strmake( "%.*s.y", strlen(pFile->name) - 6, pFile->name );
+        filename = replace_extension( pFile->name, 6, ".y" );
+        if (src_dir) filename = strmake( "%s/%s", src_dir, filename );
 
         if ((file = fopen( filename, "r" )))
         {
@@ -472,10 +482,8 @@ static FILE *open_include_file( struct incl_file *pFile )
 
     if (strendswith( pFile->name, ".h" ))
     {
-        if (src_dir)
-            filename = strmake( "%s/%.*s.idl", src_dir, strlen(pFile->name) - 2, pFile->name );
-        else
-            filename = strmake( "%.*s.idl", strlen(pFile->name) - 2, pFile->name );
+        filename = replace_extension( pFile->name, 2, ".idl" );
+        if (src_dir) filename = strmake( "%s/%s", src_dir, filename );
 
         if ((file = fopen( filename, "r" )))
         {
@@ -505,12 +513,11 @@ static FILE *open_include_file( struct incl_file *pFile )
 
     if (strendswith( pFile->name, ".h" ))
     {
+        filename = replace_extension( pFile->name, 2, ".idl" );
         if (top_src_dir)
-            filename = strmake( "%s/include/%.*s.idl",
-                                top_src_dir, strlen(pFile->name) - 2, pFile->name );
+            filename = strmake( "%s/include/%s", top_src_dir, filename );
         else if (top_obj_dir)
-            filename = strmake( "%s/include/%.*s.idl",
-                                top_obj_dir, strlen(pFile->name) - 2, pFile->name );
+            filename = strmake( "%s/include/%s", top_obj_dir, filename );
         else
             filename = NULL;
 
@@ -527,12 +534,11 @@ static FILE *open_include_file( struct incl_file *pFile )
 
     if (strendswith( pFile->name, "tmpl.h" ))
     {
+        filename = replace_extension( pFile->name, 2, ".x" );
         if (top_src_dir)
-            filename = strmake( "%s/include/%.*s.x",
-                                top_src_dir, strlen(pFile->name) - 2, pFile->name );
+            filename = strmake( "%s/include/%s", top_src_dir, filename );
         else if (top_obj_dir)
-            filename = strmake( "%s/include/%.*s.x",
-                                top_obj_dir, strlen(pFile->name) - 2, pFile->name );
+            filename = strmake( "%s/include/%s", top_obj_dir, filename );
         else
             filename = NULL;
 
@@ -778,11 +784,8 @@ static void parse_rc_file( struct incl_file *pFile, FILE *file )
  */
 static void parse_generated_idl( struct incl_file *source )
 {
-    char *header, *basename;
+    char *header = replace_extension( source->name, 4, ".h" );
 
-    basename = xstrdup( source->name );
-    basename[strlen(basename) - 4] = 0;
-    header = strmake( "%s.h", basename );
     source->filename = xstrdup( source->name );
 
     if (strendswith( source->name, "_c.c" ))
@@ -809,7 +812,6 @@ static void parse_generated_idl( struct incl_file *source )
     }
 
     free( header );
-    free( basename );
 }
 
 /*******************************************************************
@@ -855,8 +857,7 @@ static void parse_file( struct incl_file *source, int src )
     if (strendswith( source->name, ".o" ))
     {
         /* default to .c for unknown extra object files */
-        source->filename = xstrdup( source->name );
-        source->filename[strlen(source->filename) - 1] = 'c';
+        source->filename = replace_extension( source->name, 2, ".c" );
         return;
     }
 




More information about the wine-cvs mailing list