[fastjar patch] Fix for PR java/9532

Nathanael Nerode neroden@twcny.rr.com
Fri Jun 13 01:30:00 GMT 2003


This fixes a fastjar bug(s).  It's the composite of my two patches noted
in the bug trail.  Tested on i686-pc-linux-gnu (where the second part
of the bug didn't materialize).

OK if the bug submitter confirms this fixes the bugs on Solaris (where 
the bug did fully manifest)?

	PR java/9532
	* jartool.c (main): Give proper error message with -C.
	* jartool.c (add_to_jar): Make getcwd() call portable, and check
	for error return.

Index: jartool.c
===================================================================
RCS file: /cvs/gcc/gcc/fastjar/jartool.c,v
retrieving revision 1.22
diff -u -r1.22 jartool.c
--- jartool.c	31 Jan 2003 22:48:27 -0000	1.22
+++ jartool.c	13 Jun 2003 00:43:05 -0000
@@ -510,7 +510,8 @@
         if(!dir_to_change 
 	   || !file_to_add
 	   || add_to_jar(jarfd, dir_to_change, file_to_add)){
-          printf("Error adding %s to jar archive!\n", arg);
+          printf("Error adding %s (in directory %s) to jar archive!\n", \
+                 file_to_add, dir_to_change);
           exit(1);
         }
       } else {
@@ -817,8 +818,8 @@
   struct dirent *de;
   zipentry *ze;
   int stat_return;
-  char *old_dir = NULL;
-  
+  char old_dir[MAXPATHLEN];
+
   /* This is a quick compatibility fix -- Simon Weijgers <simon@weijgers.com> 
    * It fixes this:
    *   "normal" jar : org/apache/java/io/LogRecord.class
@@ -830,10 +831,12 @@
     file+=2;
   
   /* If new_dir isn't null, we need to change to that directory.  However,
-     we also need to return to the old directory when we're done */
+     we also need to return to the old directory when we're done.  See below.*/
   if(new_dir != NULL){
-    old_dir = getcwd(NULL, 0);
-
+    if (getcwd(old_dir, MAXPATHLEN) == NULL) {
+      perror("getcwd");
+      return 1;
+    }
     if(chdir(new_dir) == -1){
       perror(new_dir);
       return 1;
@@ -957,11 +960,13 @@
     fprintf(stderr, "Illegal file specified: %s\n", file);
   }
   
-  if(old_dir != NULL){
-    if(chdir(old_dir))
+  /* If (and only if!) new_dir != NULL, we switched directories, so
+     we have to switch back to the old directory. */
+  if (new_dir != NULL) {
+    if (chdir(old_dir) == -1) {
       perror(old_dir);
-    
-    free(old_dir);
+      return 1;
+    }
   }
 
   return 0;



More information about the Gcc-patches mailing list