[Pkg-owncloud-maintainers] FTBS ocsync & qtkeychain
Pino Toscano
pino at debian.org
Thu Sep 19 10:42:03 UTC 2013
Hi,
In data giovedì 19 settembre 2013 12:16:49, Svante Signell ha scritto:
> The patch is attached. Additionally, the freebsd patch is modified to
> include errno.h for definition of ENODATA and EPIPE. The compiler
> complains that EPIPE is not defined otherwise. Maybe this file can be
> included unconditionally, without harm. I wonder how the error codes
> are defined for freebsd if errno.h is not included?
Reviews below.
> --- a/src/csync_misc.c 2013-09-04 11:15:42.000000000 +0200
> +++ b/src/csync_misc.c 2013-09-19 07:09:54.000000000 +0200
> @@ -88,20 +88,15 @@ char *csync_get_local_username(void) {
> #endif /* NSS_BUFLEN_PASSWD */
>
> char *csync_get_user_home_dir(void) {
> - char home[PATH_MAX] = {0};
> - const char *envp;
> + static const char *home = NULL;
> struct passwd pwd;
> struct passwd *pwdbuf;
> char buf[NSS_BUFLEN_PASSWD];
> int rc;
>
> - envp = getenv("HOME");
> - if (envp != NULL) {
> - snprintf(home, sizeof(home), "%s", envp);
> - if (home[0] != '\0') {
> - return c_strdup(home);
> - }
> - }
> + home = getenv("HOME");
> + if (home)
> + return c_strdup(home);
Storing statically the result of getenv is wrong, since it points to the
global environment array which can be reallocated anytime.
Also, no need to rename envp to home, makes the change bigger for no
reason.
Furthermore, your changes are losing the check for an empty HOME.
A better change is the following, which is easier:
--- a/src/csync_misc.c
+++ b/src/csync_misc.c
@@ -88,7 +88,6 @@
#endif /* NSS_BUFLEN_PASSWD */
char *csync_get_user_home_dir(void) {
- char home[PATH_MAX] = {0};
const char *envp;
struct passwd pwd;
struct passwd *pwdbuf;
@@ -96,11 +95,8 @@
int rc;
envp = getenv("HOME");
- if (envp != NULL) {
- snprintf(home, sizeof(home), "%s", envp);
- if (home[0] != '\0') {
- return c_strdup(home);
- }
+ if (envp != NULL && envp[0] != '\0') {
+ return c_strdup(envp);
}
/* Still nothing found, read the password file */
> --- a/src/std/c_private.h
> +++ b/src/std/c_private.h
> @@ -26,6 +26,10 @@
> #include <sys/types.h>
> #include <sys/stat.h>
>
> +#ifdef __GNU__
> +#include <errno.h>
> +#endif
> +
No need to misuse __GNU__ for this, errno.h is a standard and such it
can be included anytime. In case it poses issues on Windows (sigh), you
can include it in the else of the _WIN32 block (as people in -bsd@
suggested regarding fcntl.h).
> #ifdef _WIN32
> #include <windef.h>
> #include <winbase.h>
> @@ -50,6 +54,11 @@
> #define geteuid() 0
> #endif
>
> +#ifndef ENODATA
> +#define ENODATA EPIPE
> +#endif
This may be problematic. c_copy in src/std/c_file.c uses ENODATA as
errno in a couple of error situations, but since c_copy is an exported
symbol (although its header is not installed), users of this function
would need to do this ENODATA→EPIPE mapping themselves too.
--
Pino Toscano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 190 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.alioth.debian.org/pipermail/pkg-owncloud-maintainers/attachments/20130919/51cd1b36/attachment.sig>
More information about the Pkg-owncloud-maintainers
mailing list