Ivana Varekova 4e8f838
diff -up sysstat-8.0.4/sadc.c.pom sysstat-8.0.4/sadc.c
Ivana Varekova 4e8f838
--- sysstat-8.0.4/sadc.c.pom	2008-01-01 10:26:31.000000000 +0100
Ivana Varekova 4e8f838
+++ sysstat-8.0.4/sadc.c	2008-02-28 10:25:20.000000000 +0100
Ivana Varekova 4e8f838
@@ -99,6 +99,32 @@ void alarm_handler(int sig)
Ivana Varekova 4e8f838
    alarm(interval);
Ivana Varekova 4e8f838
 }
Ivana Varekova 4e8f838
 
Ivana Varekova 4e8f838
+ 
Ivana Varekova 4e8f838
+/* 
Ivana Varekova 4e8f838
+ *************************************************************************** 
Ivana Varekova 4e8f838
+ * write 'count' bytes from buffer to file fd 
Ivana Varekova 4e8f838
+ *************************************************************************** 
Ivana Varekova 4e8f838
+ */ 
Ivana Varekova 4e8f838
+int write_all(int fd, const char *buffer, int count) 
Ivana Varekova 4e8f838
+{ 
Ivana Varekova 4e8f838
+       int block, offset = 0; 
Ivana Varekova 4e8f838
+ 
Ivana Varekova 4e8f838
+       while (count > 0) { 
Ivana Varekova 4e8f838
+               block = write(fd, &buffer[offset], count); 
Ivana Varekova 4e8f838
+ 
Ivana Varekova 4e8f838
+               if (block < 0) { 
Ivana Varekova 4e8f838
+                       if (errno == EINTR) continue; 
Ivana Varekova 4e8f838
+                       return block; 
Ivana Varekova 4e8f838
+               } 
Ivana Varekova 4e8f838
+               if (block == 0) return offset; 
Ivana Varekova 4e8f838
+ 
Ivana Varekova 4e8f838
+               offset += block; 
Ivana Varekova 4e8f838
+               count -= block; 
Ivana Varekova 4e8f838
+       } 
Ivana Varekova 4e8f838
+ 
Ivana Varekova 4e8f838
+       return offset; 
Ivana Varekova 4e8f838
+} 
Ivana Varekova 4e8f838
+ 
Ivana Varekova 4e8f838
 
Ivana Varekova 4e8f838
 /*
Ivana Varekova 4e8f838
  ***************************************************************************
Ivana Varekova 4e8f838
@@ -357,7 +383,7 @@ void setup_file_hdr(int fd, size_t *file
Ivana Varekova 4e8f838
    file_hdr.sa_release[UTSNAME_LEN - 1] = '\0';
Ivana Varekova 4e8f838
 
Ivana Varekova 4e8f838
    /* Write file header */
Ivana Varekova 4e8f838
-   if ((nb = write(fd, &file_hdr, FILE_HDR_SIZE)) != FILE_HDR_SIZE) {
Ivana Varekova 4e8f838
+   if ((nb = write_all(fd, &file_hdr, FILE_HDR_SIZE)) != FILE_HDR_SIZE) {
Ivana Varekova 4e8f838
       fprintf(stderr, _("Cannot write system activity file header: %s\n"),
Ivana Varekova 4e8f838
 	      strerror(errno));
Ivana Varekova 4e8f838
       exit(2);
Ivana Varekova 4e8f838
@@ -404,7 +430,7 @@ void write_special_record(int ofd, size_
Ivana Varekova 4e8f838
    }
Ivana Varekova 4e8f838
 
Ivana Varekova 4e8f838
    /* Write record now */
Ivana Varekova 4e8f838
-   if ((nb = write(ofd, &file_stats, file_stats_size)) != file_stats_size)
Ivana Varekova 4e8f838
+   if ((nb = write_all(ofd, &file_stats, file_stats_size)) != file_stats_size)
Ivana Varekova 4e8f838
       p_write_error();
Ivana Varekova 4e8f838
 }
Ivana Varekova 4e8f838
 
Ivana Varekova 4e8f838
@@ -432,32 +458,32 @@ void write_stats(int ofd, size_t file_st
Ivana Varekova 4e8f838
 	 /* Unable to lock file: wait for next iteration to try again to save data */
Ivana Varekova 4e8f838
 	 return;
Ivana Varekova 4e8f838
    }
Ivana Varekova 4e8f838
-   if ((nb = write(ofd, &file_stats, file_stats_size)) != file_stats_size)
Ivana Varekova 4e8f838
+   if ((nb = write_all(ofd, &file_stats, file_stats_size)) != file_stats_size)
Ivana Varekova 4e8f838
       p_write_error();
Ivana Varekova 4e8f838
    if (cpu_nr) {
Ivana Varekova 4e8f838
-      if ((nb = write(ofd, st_cpu, STATS_ONE_CPU_SIZE * cpu_nr)) != (STATS_ONE_CPU_SIZE * cpu_nr))
Ivana Varekova 4e8f838
+      if ((nb = write_all(ofd, st_cpu, STATS_ONE_CPU_SIZE * cpu_nr)) != (STATS_ONE_CPU_SIZE * cpu_nr))
Ivana Varekova 4e8f838
 	 p_write_error();
Ivana Varekova 4e8f838
    }
Ivana Varekova 4e8f838
    if (GET_ONE_IRQ(sadc_actflag)) {
Ivana Varekova 4e8f838
-      if ((nb = write(ofd, interrupts, STATS_ONE_IRQ_SIZE)) != STATS_ONE_IRQ_SIZE)
Ivana Varekova 4e8f838
+      if ((nb = write_all(ofd, interrupts, STATS_ONE_IRQ_SIZE)) != STATS_ONE_IRQ_SIZE)
Ivana Varekova 4e8f838
 	 p_write_error();
Ivana Varekova 4e8f838
    }
Ivana Varekova 4e8f838
    if (serial_nr) {
Ivana Varekova 4e8f838
-      if ((nb = write(ofd, st_serial, STATS_SERIAL_SIZE * serial_nr)) != (STATS_SERIAL_SIZE * serial_nr))
Ivana Varekova 4e8f838
+      if ((nb = write_all(ofd, st_serial, STATS_SERIAL_SIZE * serial_nr)) != (STATS_SERIAL_SIZE * serial_nr))
Ivana Varekova 4e8f838
 	 p_write_error();
Ivana Varekova 4e8f838
    }
Ivana Varekova 4e8f838
    if (irqcpu_nr) {
Ivana Varekova 4e8f838
-      if ((nb = write(ofd, st_irq_cpu, STATS_IRQ_CPU_SIZE * cpu_nr * irqcpu_nr))
Ivana Varekova 4e8f838
+      if ((nb = write_all(ofd, st_irq_cpu, STATS_IRQ_CPU_SIZE * cpu_nr * irqcpu_nr))
Ivana Varekova 4e8f838
 	  != (STATS_IRQ_CPU_SIZE * cpu_nr * irqcpu_nr))
Ivana Varekova 4e8f838
 	 p_write_error();
Ivana Varekova 4e8f838
    }
Ivana Varekova 4e8f838
    if (iface_nr) {
Ivana Varekova 4e8f838
-      if ((nb = write(ofd, st_net_dev, STATS_NET_DEV_SIZE * iface_nr)) != (STATS_NET_DEV_SIZE * iface_nr))
Ivana Varekova 4e8f838
+      if ((nb = write_all(ofd, st_net_dev, STATS_NET_DEV_SIZE * iface_nr)) != (STATS_NET_DEV_SIZE * iface_nr))
Ivana Varekova 4e8f838
 	 p_write_error();
Ivana Varekova 4e8f838
    }
Ivana Varekova 4e8f838
    if (disk_nr && GET_DISK(sadc_actflag)) {
Ivana Varekova 4e8f838
       /* Disk stats written only if -d option used */
Ivana Varekova 4e8f838
-      if ((nb = write(ofd, st_disk, DISK_STATS_SIZE * disk_nr)) != (DISK_STATS_SIZE * disk_nr))
Ivana Varekova 4e8f838
+      if ((nb = write_all(ofd, st_disk, DISK_STATS_SIZE * disk_nr)) != (DISK_STATS_SIZE * disk_nr))
Ivana Varekova 4e8f838
 	 p_write_error();
Ivana Varekova 4e8f838
    }
Ivana Varekova 4e8f838
 }