Moderatore: Staff



diff -Naur src/func.c ../slackyd-0.0.6.1beta/src/func.c
--- src/func.c 2008-02-19 06:27:57.000000000 +0100
+++ ../slackyd-0.0.6.1beta/src/func.c 2008-02-19 22:28:26.000000000 +0100
@@ -93,7 +93,7 @@
}
/* save contenent of file fd, big size bytes, in data */
-void load_file (char** data, FILE* fd, size_t size)
+bool load_file (char** data, FILE* fd, size_t size)
{
int i = 0;
@@ -105,20 +105,47 @@
(*data)[i++] = (char) fgetc (fd);
}
- return ;
+ return false;
}
-/* kill a child */
-void kill_child (pid_t pid)
+/* copy a file from src path to dest path (if dest exist will be overwrite).
+ * If del is true, src file will be deleted.
+ */
+bool copy_file_t (const char* src, const char* dest, bool del)
+{
+ FILE* fd_src = fopen (src, "r");
+ FILE* fd_dest = fopen (dest, "w");
+
+ if (!fd_src || !fd_dest) return true;
+
+ rewind (fd_src);
+ while (!feof (fd_src))
+ {
+ fputc (fgetc (fd_src), fd_dest);
+ }
+
+ if (del) remove (src);
+
+ return false;
+}
+
+/* If str is non null, print it. After kill child whit pid 'pid'. */
+void kill_child (const char* str, pid_t pid)
{
int status;
+ if (str)
+ {
+ fprintf (stdout, str);
+ fflush (stdout);
+ }
+
kill (pid, SIGTERM);
status = waitpid (pid, NULL, WNOHANG);
if (status == pid) /* child terminated */
return;
- kill (pid, SIGINT); /* child alive. Send SIGINT */
+ kill (pid, SIGINT); /* child alive. Send SIGINT. */
waitpid (pid, NULL, WNOHANG);
return;
diff -Naur src/net.c ../slackyd-0.0.6.1beta/src/net.c
--- src/net.c 2008-02-19 04:48:38.000000000 +0100
+++ ../slackyd-0.0.6.1beta/src/net.c 2008-02-19 22:25:54.000000000 +0100
@@ -86,23 +86,30 @@
*/
u_long get_pkg_list (int sd, repos* repos_data, const char* filename)
{
- char buffer[BUFFSIZE + 1] = { 0 };
+ char path [BUFFSIZE + 1] = { 0 },
+ tmp_path [BUFFSIZE + 1] = { 0 },
+ buffer [BUFFSIZE + 1] = { 0 };
int rval;
u_long rec_size = 0;
FILE* fd;
pid_t pid_effect;
- /* where save packages list */
- snprintf (buffer, BUFFSIZE, "%s/%s", DATADIR, filename);
- fd = fopen_or_die (buffer, "w");
+ /* file path */
+ snprintf (path, BUFFSIZE, "%s/%s", DATADIR, filename);
+ /* temporarey file path */
+ snprintf (tmp_path, BUFFSIZE, "%s/%s.tmp", DATADIR, filename);
+ fd = fopen_or_die (tmp_path, "w");
snprintf (buffer, BUFFSIZE, TEMPLATE_GET_PKG_LIST,
repos_data->path,
filename,
repos_data->a_ip);
/* send request */
- if ((send (sd, buffer, strlen (buffer), 0)) < 0)
- _error (3, "\nCannot send request to", repos_data->hostname, ".\n\n");
+ if ((send (sd, buffer, strlen (buffer), 0)) < 0)
+ {
+ remove (path);
+ _error (3, "\nCannot send request to", repos_data->hostname, ".\n\n");
+ }
/* ignore http data, receive and save other ... */
pid_effect = stupid_effect ('+', 10, 2, NULL);
@@ -116,9 +123,14 @@
rec_size += rval;
}
- kill_child (pid_effect);
- fprintf (stdout, "\r[++++++++++]");
+ if (copy_file_t (tmp_path, path, true))
+ {
+ kill_child ("\r[++++++++++]", pid_effect);
+ _error (5, "\n\nUnexpected error while copying file \"", tmp_path, "\" to \"", path, "\".\n\n");
+ }
+ kill_child ("\r[++++++++++]", pid_effect);
+
fclose (fd);
close (sd);
return rec_size;
@@ -127,8 +139,8 @@
int get_pkg (repos* repos_data, pkg_info_ptr package)
{
int rval, sd;
- char buffer[BUFFSIZE + 1] = { 0 };
- char path[BUFFSIZE + 1] = { 0 };
+ char buffer[BUFFSIZE + 1] = { 0 },
+ path[BUFFSIZE + 1] = { 0 };
FILE* fd;
pid_t pid_effect;
@@ -169,9 +181,7 @@
fwrite (buffer, 1, rval, fd);
}
- kill_child (pid_effect);
- fprintf (stdout, "\r[++++++++++]");
- fflush (stdout);
+ kill_child ("\r[++++++++++]", pid_effect);
fclose (fd);
close (sd);
diff -Naur src/packages.c ../slackyd-0.0.6.1beta/src/packages.c
--- src/packages.c 2008-02-19 06:07:35.000000000 +0100
+++ ../slackyd-0.0.6.1beta/src/packages.c 2008-02-19 20:18:41.000000000 +0100
@@ -723,7 +723,7 @@
{
struct dirent** namelist;
char path[BUFFSIZE + 1] = { 0 };
- int i = 0, n, rval;
+ int i = 0, n, rval, l;
n = scandir (DATADIR, &namelist, 0, alphasort);
if (n < 0)
@@ -741,18 +741,22 @@
while (i < n)
{
- snprintf (path, BUFFSIZE, "%s/%s", DATADIR, namelist[i]->d_name);
- fprintf (stdout, "Deleting %s...", namelist[i]->d_name);
- fflush (stdout);
- rval = remove (path);
- if (!rval)
- fprintf (stdout, "Done.\n");
- else
- perror ("Failed");
-
- free (namelist[i]);
- i++;
+ l = strlen (namelist[i]->d_name);
+ if (!strncmp (namelist[i]->d_name + l - 4, ".tgz", 4))
+ {
+ snprintf (path, BUFFSIZE, "%s/%s", DATADIR, namelist[i]->d_name);
+ fprintf (stdout, "Deleting %s...", namelist[i]->d_name);
+ fflush (stdout);
+ rval = remove (path);
+ if (!rval)
+ fprintf (stdout, "Done.\n");
+ else
+ perror ("Failed");
+ }
+ free (namelist[i]);
+ i++;
}
-
+ free (namelist[i]);
+ namelist[i] = NULL;
return false;
}
diff -Naur src/slackyd.h ../slackyd-0.0.6.1beta/src/slackyd.h
--- src/slackyd.h 2008-02-19 06:01:16.000000000 +0100
+++ ../slackyd-0.0.6.1beta/src/slackyd.h 2008-02-19 22:25:10.000000000 +0100
@@ -171,8 +171,9 @@
void verify_alloc (void* mem);
FILE* fopen_or_die (const char* file_name, const char* mode);
size_t get_file_size (FILE* fd);
-void load_file (char** data, FILE* fd, size_t size);
-void kill_child (pid_t pid);
+bool load_file (char** data, FILE* fd, size_t size);
+bool copy_file_t (const char* src, const char* dest, bool remove);
+void kill_child (const char* s, pid_t pid);
char* _getline (FILE* fd, unsigned n_line);
char* _getstrline (char* str);
pid_t stupid_effect (char c, u_short element, u_short time_sleep, const char* s);




.
michelino ha scritto:1) Lo switch -C ora funziona come detto
2) Forse non mi sono spiegato per il download, io intendevo questo meccanismodownload CHECKSUMS.md5.tmp FILELIST.TXT.tmp PACKAGES.TXT.tmp
Non mi sembra che la versione patchata funzioni così
e dopo
mv CHECKSUMS.md5.tmp CHECKSUMS.md5
mv FILELIST.TXT.tmp FILELIST.TXT
mv PACKAGES.TXT.tmp PACKAGES.TXT


Unexpected error while copying file "/var/slackyd/FILELIST.TXT.tmp" to "/var/slackyd/FILELIST.TXT".
No changes in ChangeLog.txt between your last update and now.
Do you really want to download all other files (y/N)?

michelino ha scritto:1) Con il nuovo metodo mi fa differenza se l'update lo do come root o come utente normale, mi spiego: prima updatavo indifferentemente come root o cume user, e non mi dava probleami, dopo l'applicazione della patch se updato come root, il riupdate come user mi da l'errore
- Codice: Seleziona tutto
Unexpected error while copying file "/var/slackyd/FILELIST.TXT.tmp" to "/var/slackyd/FILELIST.TXT".
hai in qualche modo cambiato la maschera dei permessi o sono io che ricordo male?



2) non sarebbe meglio prima scaricare tutti e tre i file e poi sostituire i vecchi, poichè in caso di interruzione così si avrebbe una situazione non aggiornata ma pur sempre congruente dei file, nel caso odierno, invece, il FILELIST.TXT nuovo potrebbe non essere congruente con gli altri due se l'interruzione avviene subito dopo l'aggiornamento del primo:

3) non è il caso di mantenere la data e l'ora di creazione dei file come risulta dal repository, così con un semplice controllo dei timestamps si può evitare di scaricare gli stessi identici file, magari con un opzione analoga a quella di slackpkg che in caso di identità chiede
- Codice: Seleziona tutto
No changes in ChangeLog.txt between your last update and now.
Do you really want to download all other files (y/N)?
Tutto questo sempre IMVVVHO, perché il tool e fantastico e lo uso costantemente






$ slackyd -s xrope
+-----------------------------+
| Slacky Downloader |
| |
| Written by Dani |
| <dani@slacky.it> |
+-----------------------------+
Searching xrope...
Packages xrope not found.
Error code: Success <------- Qui!!

diff -Naur slackyd-0.0.7beta/src/func.c slackyd-0.0.7.1beta/src/func.c
--- slackyd-0.0.7beta/src/func.c 2008-02-26 01:12:41.000000000 +0100
+++ slackyd-0.0.7.1beta/src/func.c 2008-02-27 14:55:03.000000000 +0100
@@ -38,7 +38,6 @@
}
va_end (ap);
- perror ("Error code");
exit (1);
}
diff -Naur slackyd-0.0.7beta/src/slackyd.h slackyd-0.0.7.1beta/src/slackyd.h
--- slackyd-0.0.7beta/src/slackyd.h 2008-02-26 02:53:57.000000000 +0100
+++ slackyd-0.0.7.1beta/src/slackyd.h 2008-02-27 14:54:53.000000000 +0100
@@ -19,7 +19,7 @@
* MA 02110-1301, USA.
*/
#define _GNU_SOURCE
-#define SLACKYD_VERSION "0.0.7 beta"
+#define SLACKYD_VERSION "0.0.7.1 beta"
#include <stdio.h>
#include <stdlib.h>


dani[slackyd]$ tar xf slackyd-0.0.7beta.tar
dani[slackyd]$ cd slackyd-0.0.7beta
dani[slackyd-0.0.7beta]$ patch -p1 < ../patches/slackyd-0.0.7.1.diff
patching file src/func.c
patching file src/slackyd.h
dani[slackyd-0.0.7beta]$


Visitano il forum: Nessuno e 1 ospite