network_stop(): Fixed forgotten removal of a foreign PID file.
[udpgate.git] / src / bundle-util.c
index 83057b2..30e1b77 100644 (file)
 
 #include "bundle-util.h"       /* self */
 #include "bundle.h"
+#include "main.h"
 
 
-static const guint8 *bundle_util_file_retrieve(guint32 *data_length_return,const gchar *pathname,const gchar *basename)
+static G_CONST_RETURN guint8 *bundle_util_file_retrieve(guint32 *data_length_return,const gchar *basename)
 {
 const guint8 *data;
 
        g_return_val_if_fail(data_length_return!=NULL,NULL);
-       g_return_val_if_fail(pathname!=NULL,NULL);
        g_return_val_if_fail(basename!=NULL,NULL);
 
+       if (optarg_verbose)
+               g_message(_("Retrieving internally stored: %s"),basename);
        data=g_hash_table_lookup(bundle_hash_new(),basename);
        g_return_val_if_fail(data!=NULL,NULL);
        *data_length_return=GUINT32_FROM_BE(*(guint32 *)data);
@@ -66,7 +68,7 @@ time_t time_current;
        g_return_val_if_fail(pathname!=NULL,FALSE);
        g_return_val_if_fail(basename!=NULL,FALSE);
 
-       if (!(data=bundle_util_file_retrieve(&data_length,pathname,basename)))
+       if (!(data=bundle_util_file_retrieve(&data_length,basename)))
                return FALSE;
 
        if (-1==(fd=open(pathname,O_RDONLY))) {
@@ -84,10 +86,12 @@ time_t time_current;
                g_warning(_("Error reading during the check of file modifications of \"%s\": %m"),pathname);
        if (close(fd))
                g_warning(_("Error closing the file \"%s\" during the check of its modifications: %m"),pathname);
-       g_free(data_found);
-
-       if (got==(int)data_length && !memcmp(data_found,data,data_length))
+       /* memcmp(3) requires 'data_found'! */
+       if (got==(int)data_length && !memcmp(data_found,data,data_length)) {
+               g_free(data_found);
                return TRUE;
+               }
+       g_free(data_found);
 
        time_current=time(NULL);        /* It is segfault to gmtime(NULL). */
        if (!strftime(strftime_buffer,sizeof(strftime_buffer),"GMT%FT%T",gmtime(&time_current))) {
@@ -120,7 +124,7 @@ gboolean bundle_util_file_remove(const gchar *pathname,const gchar *basename)
        return TRUE;
 }
 
-gboolean bundle_util_file_write(const gchar *pathname,const gchar *basename,mode_t pathname_mode)
+gboolean bundle_util_file_write(const gchar *pathname,const gchar *basename,mode_t pathname_mode,gboolean pathname_backup)
 {
 const guint8 *data;
 guint32 data_length;
@@ -129,10 +133,10 @@ int fd;
        g_return_val_if_fail(pathname!=NULL,FALSE);
        g_return_val_if_fail(basename!=NULL,FALSE);
 
-       if (!(data=bundle_util_file_retrieve(&data_length,pathname,basename)))
+       if (!(data=bundle_util_file_retrieve(&data_length,basename)))
                return FALSE;
 
-       if (!bundle_util_file_backup_conditional(pathname,basename))
+       if (pathname_backup && !bundle_util_file_backup_conditional(pathname,basename))
                return FALSE;
 
        if (-1==(fd=open(pathname,O_WRONLY|O_CREAT|O_TRUNC,pathname_mode))) {