[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Bug#636512: acl: Fix FTBFS on hurd-i386



On Wed, Aug 03, 2011 at 07:36:27PM +0200, Svante Signell wrote:
>Package: acl
>Version: 2.2.51-3
>Severity: important
>Tags: patch
>User: debian-hurd@lists.debian.org
>Usertags: hurd
>
>Hi,
>
>currently acl does not compile on hurd-i386. The problem is a PATH_MAX
>definition which is not supported on GNU/Hurd. Attached are two patches
>which fixes these issues. First patch is conditioned on __GNU__ and will
>not affect other systems, while the second patch is changing behaviour
>for all systems (and assuming getline is available).
>
>Thanks,
>Svante

I don't have a hurd system and would like to know if acl compiled with
the first patch still works correctly on a hurd system.

>--- acl-2.2.51/setfacl/parse.c.orig	2010-01-22 23:00:28.000000000 +0000
>+++ acl-2.2.51/setfacl/parse.c	2011-08-03 17:03:19.000000000 +0000
>@@ -419,7 +419,13 @@
> 	  bytes for "# file: ". Not a good solution but for now it is the
> 	  best I can do without too much impact on the code. [tw]
> 	*/
>+
>+#ifdef __GNU__
>+	char *linebuf;
>+	size_t dummy = 0;
>+#else
> 	char linebuf[(4*PATH_MAX)+9];
>+#endif
> 	char *cp;
> 	char *p;
> 	int comments_read = 0;
>@@ -449,9 +455,13 @@
> 		if (line)
> 			(*line)++;
> 
>+#ifdef __GNU__
>+		if (getline(&linebuf, &dummy, file) == -1)
>+			break;
>+#else
> 		if (fgets(linebuf, sizeof(linebuf), file) == NULL)
> 			break;
>-		
>+#endif		
> 		comments_read = 1;
> 
> 		p = strrchr(linebuf, '\0');
>@@ -473,7 +483,12 @@
> 					goto fail;
> 				*path_p = (char*)malloc(strlen(cp)+1);
> 				if (!*path_p)
>+				  {
>+#ifdef __GNU__
>+				    free (linebuf);
>+#endif
> 					return -1;
>+				  }
> 				strcpy(*path_p, cp);
> 			}
> 		} else if (strncmp(cp, "owner:", 6) == 0) {
>@@ -522,13 +537,24 @@
> 		}
> 	}
> 	if (ferror(file))
>+	  {
>+#ifdef __GNU__
>+	    free (linebuf);
>+#endif
> 		return -1;
>+	  }
>+#ifdef __GNU__
>+	free (linebuf);
>+#endif
> 	return comments_read;
> fail:
> 	if (path_p && *path_p) {
> 		free(*path_p);
> 		*path_p = NULL;
> 	}
>+#ifdef __GNU__
>+	free (linebuf);
>+#endif
> 	return -EINVAL;
> }
> 

>--- acl-2.2.51/setfacl/parse.c.orig	2010-01-22 23:00:28.000000000 +0000
>+++ acl-2.2.51/setfacl/parse.c		2011-08-03 17:10:24.000000000 +0000
>@@ -419,7 +419,9 @@
> 	  bytes for "# file: ". Not a good solution but for now it is the
> 	  best I can do without too much impact on the code. [tw]
> 	*/
>-	char linebuf[(4*PATH_MAX)+9];
>+
>+	char *linebuf;
>+	size_t dummy = 0;
> 	char *cp;
> 	char *p;
> 	int comments_read = 0;
>@@ -449,9 +451,8 @@
> 		if (line)
> 			(*line)++;
> 
>-		if (fgets(linebuf, sizeof(linebuf), file) == NULL)
>+		if (getline(&linebuf, &dummy, file) == -1)
> 			break;
>-		
> 		comments_read = 1;
> 
> 		p = strrchr(linebuf, '\0');
>@@ -472,8 +473,10 @@
> 				if (*path_p)
> 					goto fail;
> 				*path_p = (char*)malloc(strlen(cp)+1);
>-				if (!*path_p)
>-					return -1;
>+				if (!*path_p) {
>+				  free (linebuf);
>+				  return -1;
>+				}
> 				strcpy(*path_p, cp);
> 			}
> 		} else if (strncmp(cp, "owner:", 6) == 0) {
>@@ -521,14 +524,18 @@
> 				*flags = f;
> 		}
> 	}
>-	if (ferror(file))
>-		return -1;
>+	if (ferror(file)) {
>+	   free (linebuf);
>+	   return -1;
>+	}
>+	free (linebuf);
> 	return comments_read;
> fail:
> 	if (path_p && *path_p) {
> 		free(*path_p);
> 		*path_p = NULL;
> 	}
>+	free (linebuf);
> 	return -EINVAL;
> }
> 

Attachment: signature.asc
Description: Digital signature


Reply to: