Erroneous use of getcwd on lib/nspath.c

Ricardo Jose Maraschini ricardo.maraschini at opservices.com.br
Fri Oct 26 15:12:58 CEST 2012


Accordingly to manpages and some home made tests, getcwd returns NULL
when an error occurs, not a value < 0.

Following, on openbsd MAX_PATH is 1024 bytes while in linux it is 4096
bytes, so i thought it would be ok to include <limits.h> and use macro
MAX_PATH, not a fixed size of 4096.

Also we don't need to make sizeof(path) - 1 when calling getcwd.
Quoting manpage:

"The size argument is the size, in bytes, of the array referenced by
buf."

Is it sounds resonable?
Comments?

===================================================================
--- lib/nspath.c	(revision 2409)
+++ lib/nspath.c	(working copy)
@@ -5,6 +5,7 @@
 #include <string.h>
 #include <sys/types.h>
 #include <stdio.h>
+#include <limits.h>
 #include "nspath.h"
 
 #ifndef PATH_MAX
@@ -119,7 +120,7 @@
 
 char *nspath_absolute(const char *rel_path, const char *base)
 {
-	char cwd[4096];
+	char cwd[PATH_MAX];
 	int len;
 	char *path = NULL, *normpath;
 
@@ -127,7 +128,7 @@
 		return nspath_normalize(rel_path);
 
 	if (!base) {
-		if (getcwd(cwd, sizeof(cwd) - 1) < 0)
+		if (getcwd(cwd, sizeof(cwd)) == NULL)
 			return NULL;
 		base = cwd;
 	}




------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_sfd2d_oct




More information about the Developers mailing list