View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0003033 | GNUnet | file-sharing service | public | 2013-09-13 03:03 | 2013-12-24 20:54 |
| Reporter | bratao | Assigned To | LRN | ||
| Priority | high | Severity | major | Reproducibility | always |
| Status | closed | Resolution | fixed | ||
| Platform | W32 | OS | Windows | OS Version | 8.1 |
| Product Version | Git master | ||||
| Target Version | 0.10.0 | Fixed in Version | 0.10.0 | ||
| Summary | 0003033: File downloaded get corrupted / TRUNCATE needed in plibc | ||||
| Description | Using the latest SVN (r29220 ) , I shared a couple of music files, and tried to download them later. All got randomly corrupted. I don't really know what extra information should I put here. | ||||
| Tags | No tags attached. | ||||
| Attached Files | gnunet-plib_update.patch (5,181 bytes)
Index: src/fs/fs_download.c
===================================================================
--- src/fs/fs_download.c (revision 29251)
+++ src/fs/fs_download.c (working copy)
@@ -541,7 +541,7 @@
GNUNET_FS_download_make_status_ (&pi, dc);
if ((NULL != dc->filename) &&
(0 !=
- truncate (dc->filename,
+ TRUNCATE (dc->filename,
GNUNET_ntohll (dc->uri->data.chk.file_length))))
GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "truncate",
dc->filename);
@@ -1103,7 +1103,7 @@
if (NULL != dc->filename)
{
if (0 !=
- truncate (dc->filename,
+ TRUNCATE (dc->filename,
GNUNET_ntohll (dc->uri->data.chk.file_length)))
GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "truncate",
dc->filename);
@@ -1767,7 +1767,7 @@
if (NULL != dc->filename)
{
if (0 !=
- truncate (dc->filename,
+ TRUNCATE (dc->filename,
GNUNET_ntohll (dc->uri->data.chk.file_length)))
GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "truncate",
dc->filename);
Index: src/include/plibc.h
===================================================================
--- src/include/plibc.h (revision 29251)
+++ src/include/plibc.h (working copy)
@@ -22,7 +22,7 @@
* @brief PlibC header
* @attention This file is usually not installed under Unix,
* so ship it with your application
- * @version $Revision$
+ * @version $Revision: 149 $
*/
#ifndef _PLIBC_H_
@@ -115,6 +115,10 @@
_SC_PAGE_SIZE = 30
};
+#if !defined(EACCESS)
+# define EACCESS EACCES
+#endif
+
/* Thanks to the Cygwin project */
#if !defined(ENOCSI)
# define ENOCSI 43 /* No CSI structure available */
@@ -521,9 +525,6 @@
#if USE_IPV6
int inet_pton6(const char *src, u_char *dst);
#endif
-#if !defined(FTRUNCATE_DEFINED)
-int truncate(const char *fname, int distance);
-#endif
int statfs(const char *path, struct statfs *buf);
const char *hstrerror(int err);
int mkstemp(char *tmplate);
@@ -557,8 +558,9 @@
int _win_creat(const char *path, mode_t mode);
char *_win_ctime(const time_t *clock);
char *_win_ctime_r(const time_t *clock, char *buf);
-int _win_fstat(int handle, struct stat *buffer);
+int _win_fstat(int handle, struct _stat *buffer);
int _win_ftruncate(int fildes, off_t length);
+int _win_truncate(const char *fname, int distance);
int _win_kill(pid_t pid, int sig);
int _win_pipe(int *phandles);
intptr_t _win_mkfifo(const char *path, mode_t mode);
@@ -570,7 +572,7 @@
void _win_srandom(unsigned int seed);
int _win_remove(const char *path);
int _win_rename(const char *oldname, const char *newname);
-int _win_stat(const char *path, struct stat *buffer);
+int _win_stat(const char *path, struct _stat *buffer);
int _win_stat64(const char *path, struct stat64 *buffer);
long _win_sysconf(int name);
int _win_unlink(const char *filename);
@@ -583,7 +585,7 @@
unsigned long long offset);
int _win_msync(void *start, size_t length, int flags);
int _win_munmap(void *start, size_t length);
-int _win_lstat(const char *path, struct stat *buf);
+int _win_lstat(const char *path, struct _stat *buf);
int _win_lstat64(const char *path, struct stat64 *buf);
int _win_readlink(const char *path, char *buf, size_t bufsize);
int _win_accept(int s, struct sockaddr *addr, int *addrlen);
@@ -610,6 +612,7 @@
int optlen);
int _win_shutdown(int s, int how);
int _win_socket(int af, int type, int protocol);
+int _win_socketpair(int af, int type, int protocol, int socket_vector[2]);
struct hostent *_win_gethostbyaddr(const char *addr, int len, int type);
struct hostent *_win_gethostbyname(const char *name);
struct hostent *gethostbyname2(const char *name, int af);
@@ -658,6 +661,7 @@
#define FOPEN(f, m) fopen(f, m)
#define FCLOSE(f) fclose(f)
#define FTRUNCATE(f, l) ftruncate(f, l)
+ #define TRUNCATE(f, l) truncate(f, l)
#define OPENDIR(d) opendir(d)
#define CLOSEDIR(d) closedir(d)
#define READDIR(d) readdir(d)
@@ -722,6 +726,7 @@
#define SETSOCKOPT(s, l, o, v, n) setsockopt(s, l, o, v, n)
#define SHUTDOWN(s, h) shutdown(s, h)
#define SOCKET(a, t, p) socket(a, t, p)
+ #define SOCKETPAIR(a, t, p, v) socketpair(a, t, p, v)
#define GETHOSTBYADDR(a, l, t) gethostbyaddr(a, l, t)
#define GETHOSTBYNAME(n) gethostbyname(n)
#define GETTIMEOFDAY(t, n) gettimeofday(t, n)
@@ -756,6 +761,7 @@
#define FOPEN(f, m) _win_fopen(f, m)
#define FCLOSE(f) _win_fclose(f)
#define FTRUNCATE(f, l) _win_ftruncate(f, l)
+ #define TRUNCATE(f, l) _win_truncate(f, l)
#define OPENDIR(d) _win_opendir(d)
#define CLOSEDIR(d) _win_closedir(d)
#define READDIR(d) _win_readdir(d)
@@ -820,6 +826,7 @@
#define SETSOCKOPT(s, l, o, v, n) _win_setsockopt(s, l, o, v, n)
#define SHUTDOWN(s, h) _win_shutdown(s, h)
#define SOCKET(a, t, p) _win_socket(a, t, p)
+ #define SOCKETPAIR(a, t, p, v) _win_socketpair(a, t, p, v)
#define GETHOSTBYADDR(a, l, t) _win_gethostbyaddr(a, l, t)
#define GETHOSTBYNAME(n) _win_gethostbyname(n)
#define GETTIMEOFDAY(t, n) gettimeofday(t, n)
| ||||
|
|
Did the downloads complete? Did you use gnunet-fs-gtk or gnunet-download? |
|
|
The files were published using my own gui (cangote), as gnunet-fs-gtk was crashing. I downloaded using gnunet-fs-gtk. All files was marked as completed. I will try to publish and download using the command line tools to see if I can reproduce it. |
|
|
I've tried it with some small (JPG) and large (MP4) files here, and 'diff' reported no differences. Is the resulting file size the same? How did the corruption show? |
|
|
I was downloading multiple files. Mostly of the (mp3) files, was skipping. But one specific file, had part of the original mp3 and the other half was from another file. But, I can't reproduce anymore with the latest SVN. |
|
|
Well, it still happening. Probably is a W32 error. The file name is 01. Que Se Chama Amor - Só Pra Contrariar.mp3. But it show this message: Sep 14 00:00:15-00000000000200482707 gnunet-fs-gtk-7108 WARNING `truncate' faile d on file `C:\sbuild\mine\gnunet-gtk\01. Que Se Chama Amor - S+¦ Pra Contrariar. mp3' at fs_download.c:1773 with error: No such file or directory |
|
|
Apparently there is a typo, and it's not calling PlibC truncate. (12:33:16 AM) bratao: Wait (12:33:41 AM) bratao: Aparentelly it is not calling plibc truncate. (12:33:51 AM) bratao: mingw-w64 have a truncate (12:34:21 AM) LRN: ah (12:34:26 AM) LRN: AH! (12:34:38 AM) LRN: it says "truncate", not "TRUNCATE", like it should (12:35:26 AM) bratao: \o/ |
|
|
LRN: If I use 'TRUNCATE", I get: fs_download.c: In function 'try_match_block': fs_download.c:544:10: warning: implicit declaration of function 'TRUNCATE' [-Wimplicit-function-declaration] |
|
|
Assigning to LRN as we need TRUNCATE in plibc to fix this. |
|
|
I added a patch that fix and update the plibc includes. |
|
|
Fixed in SVN 29253. |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2013-09-13 03:03 | bratao | New Issue | |
| 2013-09-13 15:02 | Christian Grothoff | Note Added: 0007438 | |
| 2013-09-13 15:03 | Christian Grothoff | Assigned To | => Christian Grothoff |
| 2013-09-13 15:03 | Christian Grothoff | Status | new => feedback |
| 2013-09-13 15:16 | bratao | Note Added: 0007440 | |
| 2013-09-13 15:16 | bratao | Status | feedback => assigned |
| 2013-09-13 21:50 | Christian Grothoff | Note Added: 0007441 | |
| 2013-09-13 21:50 | Christian Grothoff | Status | assigned => feedback |
| 2013-09-14 04:48 | bratao | Note Added: 0007444 | |
| 2013-09-14 04:48 | bratao | Status | feedback => assigned |
| 2013-09-14 04:48 | bratao | Status | assigned => resolved |
| 2013-09-14 04:48 | bratao | Resolution | open => fixed |
| 2013-09-14 05:02 | bratao | Note Added: 0007446 | |
| 2013-09-14 05:02 | bratao | Status | resolved => feedback |
| 2013-09-14 05:02 | bratao | Resolution | fixed => reopened |
| 2013-09-14 05:36 | bratao | Status | feedback => assigned |
| 2013-09-14 05:38 | bratao | Note Added: 0007448 | |
| 2013-09-14 14:36 | Christian Grothoff | Note Added: 0007449 | |
| 2013-09-14 15:52 | Christian Grothoff | Summary | File downloaded get corrupted => File downloaded get corrupted / TRUNCATE needed in plibc |
| 2013-09-14 15:52 | Christian Grothoff | Note Added: 0007451 | |
| 2013-09-14 15:52 | Christian Grothoff | Assigned To | Christian Grothoff => LRN |
| 2013-09-14 17:40 | bratao | File Added: gnunet-plib_update.patch | |
| 2013-09-14 17:40 | bratao | Note Added: 0007452 | |
| 2013-09-14 18:14 | Christian Grothoff | Note Added: 0007453 | |
| 2013-09-14 18:14 | Christian Grothoff | Status | assigned => resolved |
| 2013-09-14 18:14 | Christian Grothoff | Fixed in Version | => 0.10.0 |
| 2013-09-14 18:14 | Christian Grothoff | Resolution | reopened => fixed |
| 2013-09-14 18:15 | Christian Grothoff | Product Version | => Git master |
| 2013-09-14 18:15 | Christian Grothoff | Target Version | => 0.10.0 |
| 2013-12-24 20:54 | Christian Grothoff | Status | resolved => closed |