Mailinglist Archive: opensuse-commit (1078 mails)

< Previous Next >
commit linuxrc
  • From: root@xxxxxxxxxxxxxxx (h_root)
  • Date: Thu, 24 May 2007 12:56:59 +0200
  • Message-id: <20070524105659.E919E678171@xxxxxxxxxxxxxxx>

Hello community,

here is the log from the commit of package linuxrc
checked in at Thu May 24 12:56:59 CEST 2007.

--------
--- linuxrc/linuxrc.changes     2007-03-26 17:08:52.000000000 +0200
+++ /mounts/work_src_done/STABLE/linuxrc/linuxrc.changes        2007-05-24 12:37:43.000000000 +0200
@@ -1,0 +2,7 @@
+Thu May 24 12:37:40 CEST 2007 - snwint@xxxxxxx
+
+- withiscsi=1 now implies netsetup=1 (#271420)
+- rewrote swap space dialog: it can create swap partitions
+  and files now
+
+-------------------------------------------------------------------

Old:
----
  linuxrc-2.1.24.tar.bz2

New:
----
  linuxrc-2.1.25.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ linuxrc.spec ++++++
--- /var/tmp/diff_new_pack.y25638/_old  2007-05-24 12:56:53.000000000 +0200
+++ /var/tmp/diff_new_pack.y25638/_new  2007-05-24 12:56:53.000000000 +0200
@@ -1,5 +1,5 @@
 #
-# spec file for package linuxrc (Version 2.1.24)
+# spec file for package linuxrc (Version 2.1.25)
 #
 # Copyright (c) 2007 SUSE LINUX Products GmbH, Nuernberg, Germany.
 # This file and all modifications and additions to the pristine
@@ -11,14 +11,14 @@
 # norootforbuild
 
 Name:           linuxrc
-BuildRequires:  hwinfo-devel
+BuildRequires:  e2fsprogs-devel hwinfo-devel
 License:        GNU General Public License (GPL)
 Group:          System/Boot
 Autoreqprov:    on
 Summary:        SUSE Installation Program
-Version:        2.1.24
+Version:        2.1.25
 Release:        1
-Source:         linuxrc-2.1.24.tar.bz2
+Source:         linuxrc-2.1.25.tar.bz2
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 
 %description
@@ -53,6 +53,10 @@
 %doc linuxrc.html
 
 %changelog
+* Thu May 24 2007 - snwint@xxxxxxx
+- withiscsi=1 now implies netsetup=1 (#271420)
+- rewrote swap space dialog: it can create swap partitions
+  and files now
 * Mon Mar 26 2007 - snwint@xxxxxxx
 - new vfat fs detection (#257117)
 - added ext4dev support

++++++ linuxrc-2.1.24.tar.bz2 -> linuxrc-2.1.25.tar.bz2 ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/linuxrc-2.1.24/Changelog new/linuxrc-2.1.25/Changelog
--- old/linuxrc-2.1.24/Changelog        2007-03-26 17:08:07.000000000 +0200
+++ new/linuxrc-2.1.25/Changelog        2007-05-23 17:27:31.000000000 +0200
@@ -1,3 +1,8 @@
+23/5/2007:     v2.1.25
+       - withiscsi=1 now implies netsetup=1 (#271420)
+       - rewrote swap space dialog: it can create swap partitions
+         and files now
+
 25/3/2007:     v2.1.24
        - new vfat fs detection (#257117)
        - added ext4dev support
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/linuxrc-2.1.24/file.c new/linuxrc-2.1.25/file.c
--- old/linuxrc-2.1.24/file.c   2007-03-26 17:07:52.000000000 +0200
+++ new/linuxrc-2.1.25/file.c   2007-05-23 17:22:03.000000000 +0200
@@ -276,7 +276,8 @@
   { key_ibft_gateway,   "iSCSI_INITIATOR_GATEWAY",  kf_ibft              },
   { key_ibft_dns,       "iSCSI_INITIATOR_DNSADDR1", kf_ibft              },
   { key_net_retry,      "NetRetry",       kf_cfg + kf_cmd                },
-  { key_bootif,         "BOOTIF",         kf_cmd                         }
+  { key_bootif,         "BOOTIF",         kf_cmd                         },
+  { key_swap_size,      "SwapSize",       kf_cfg + kf_cmd                },
 };
 
 static struct {
@@ -1368,6 +1369,10 @@
 
       case key_withiscsi:
         if(f->is.numeric) config.withiscsi = f->nvalue;
+        if(config.withiscsi && !config.net.do_setup) {
+          config.net.do_setup |= DS_SETUP;
+          config.net.setup = NS_DEFAULT;
+        }
         break;
 
       case key_startshell:
@@ -1473,6 +1478,10 @@
         }
         break;
 
+      case key_swap_size:
+        if(f->is.numeric) config.swap_file_size = f->nvalue;
+        break;
+
       default:
         break;
     }
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/linuxrc-2.1.24/file.h new/linuxrc-2.1.25/file.h
--- old/linuxrc-2.1.24/file.h   2007-02-14 11:50:35.000000000 +0100
+++ new/linuxrc-2.1.25/file.h   2007-05-23 17:22:11.000000000 +0200
@@ -48,7 +48,7 @@
   key_dhcpcd, key_layer2, key_wlan_essid, key_wlan_auth, key_wlan_key_ascii,
   key_wlan_key_hex, key_wlan_key_pass, key_wlan_key_len, key_netcardname,
   key_ibft_hwaddr, key_ibft_ipaddr, key_ibft_netmask, key_ibft_gateway,
-  key_ibft_dns, key_net_retry, key_bootif
+  key_ibft_dns, key_net_retry, key_bootif, key_swap_size
 } file_key_t;
 
 typedef enum {
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/linuxrc-2.1.24/global.h new/linuxrc-2.1.25/global.h
--- old/linuxrc-2.1.24/global.h 2007-03-26 17:07:52.000000000 +0200
+++ new/linuxrc-2.1.25/global.h 2007-05-24 12:06:37.000000000 +0200
@@ -11,6 +11,8 @@
 #include <netinet/in.h>
 #include <inttypes.h>
 
+#include <blkid/blkid.h>
+
 #include "tftp.h"
 #include "po/text_langids.h"
 #include "text.h"
@@ -362,6 +364,11 @@
   int kbd_fd;                  /* fd for console */
   slist_t *ethtool;            /* ethtool options */
   slist_t *cd1texts;           /* text for requesting next product cd */
+  unsigned swap_file_size;     /* swap file size in MB */
+
+  struct {                     /* libblkid related things */
+    blkid_cache cache;
+  } blkid;
 
   struct {
     char *dir;                 /* driver update source dir */
@@ -456,6 +463,7 @@
     char *instsys2;
     char *live;
     char *update;
+    char *swap;
   } mountpoint;
 
   struct {
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/linuxrc-2.1.24/install.c new/linuxrc-2.1.25/install.c
--- old/linuxrc-2.1.24/install.c        2007-03-26 17:07:52.000000000 +0200
+++ new/linuxrc-2.1.25/install.c        2007-05-24 12:35:37.000000000 +0200
@@ -49,6 +49,9 @@
 #include "auto2.h"
 #include "fstype.h"
 
+#ifndef MNT_DETACH
+#define MNT_DETACH     (1 << 1)
+#endif
 
 static char  inst_rootimage_tm [MAX_FILENAME];
 
@@ -521,58 +524,204 @@
 }
 
 
+/*
+ * build a partition list
+ */
 int inst_choose_partition(char **partition, int swap, char *txt_menu, char *txt_input)
 {
-  int i, item_cnt, rc;
+  int i, j, rc, item_cnt, item_cnt1, item_cnt2, item_cnt3;
   char **items, **values;
+  char **items1, **values1;
+  char **items2, **values2;
+  char **items3, **values3;
   char *type;
   slist_t *sl;
-  char buf[256];
-  int found = 0;
-  static int last_item = 0;
+  char buf[256], *dev;
+  int found = 0, item_mk_part = 0, item_mk_file = 0;
   char *s, *tmp = NULL;
+  static char *last_part = NULL;
+  int last_item, last_found, last_item1 = 0, last_item2 = 0, last_item3 = 0;
+  char *module;
 
   util_update_disk_list(NULL, 1);
   util_update_swap_list();
 
   for(i = 0, sl = config.partitions; sl; sl = sl->next) i++;
 
-  /* just max values, actual lists might be shorter */
-  items = calloc(i + 2, sizeof *items);
-  values = calloc(i + 2, sizeof *values);
+  /*
+   * Just max values, actual lists might be shorter.
+   * list1: swap, list2: with fs or empty, list3: with fs
+   */
+  items1 = calloc(i + 4, sizeof *items1);
+  values1 = calloc(i + 4, sizeof *values1);
+  items2 = calloc(i + 4, sizeof *items2);
+  values2 = calloc(i + 4, sizeof *values2);
+  items3 = calloc(i + 4, sizeof *items3);
+  values3 = calloc(i + 4, sizeof *values3);
 
-  for(item_cnt = 0, sl = config.partitions; sl; sl = sl->next) {
+  for(item_cnt1 = item_cnt2 = item_cnt3 = 0, sl = config.partitions; sl; sl = sl->next) {
     if(
-      sl->key &&
-      !slist_getentry(config.swaps, sl->key)                /* don't show active swaps */
+      sl->key && !slist_getentry(config.swaps, sl->key)          /* don't show active swaps */
     ) {
-      sprintf(buf, "/dev/%s", sl->key);
-      type = fstype(buf);
-      if(type && (!strcmp(type, "swap") ^ !swap)) {
-        if(*partition && !strcmp(sl->key, *partition)) found = 1;
-        sprintf(buf, "%-12s : %s", sl->key, type);
-        values[item_cnt] = strdup(sl->key);
-        items[item_cnt++] = strdup(buf);
+      if(blk_size(long_dev(sl->key)) < (128 << 10)) continue;
+
+      if(*partition && !strcmp(sl->key, *partition)) found = 1;
+      last_found = last_part && !strcmp(sl->key, last_part) ? 1 : 0;
+
+      sprintf(buf, "%s (%s)", sl->key, blk_ident(long_dev(sl->key)));
+
+      type = fstype(long_dev(sl->key));
+
+      if(type && !strcmp(type, "swap")) {
+        values1[item_cnt1] = strdup(sl->key);
+        items1[item_cnt1++] = strdup(buf);
+        if(last_found) last_item1 = item_cnt1;
+      }
+      else if(type || swap) {
+        values2[item_cnt2] = strdup(sl->key);
+        items2[item_cnt2++] = strdup(buf);
+        if(last_found) last_item2 = item_cnt2;
+        if(type) {
+          values3[item_cnt3] = strdup(sl->key);
+          items3[item_cnt3++] = strdup(buf);
+          if(last_found) last_item3 = item_cnt3;
+        }
       }
     }
   }
 
-  if(*partition && !found && item_cnt) {
-    sprintf(buf, "/dev/%s", *partition);
-    type = fstype(buf);
-    sprintf(buf, "%-12s : %s", *partition, type ?: "");
-    values[item_cnt] = strdup(*partition);
-    items[item_cnt++] = strdup(buf);
+  if(*partition && !found) {
+    sprintf(buf, "%s (%s)", *partition, blk_ident(long_dev(*partition)));
+    values2[item_cnt2] = strdup(*partition);
+    items2[item_cnt2++] = strdup(buf);
+  }
+
+  if(swap) {
+    values1[item_cnt1] = NULL;
+    items1[item_cnt1++] = strdup("create swap partition");
+    item_mk_part = item_cnt1;
+    if(config.swap_file_size) {
+      values1[item_cnt1] = NULL;
+      items1[item_cnt1++] = strdup("create swap file");
+      item_mk_file = item_cnt1;
+    }
+  }
+
+  if(swap) {
+    item_cnt = item_cnt1;
+    items = items1;
+    values = values1;
+    last_item = last_item1;
+  }
+  else {
+    item_cnt = item_cnt3;
+    items = items3;
+    values = values3;
+    last_item = last_item3;
   }
 
   rc = 1;
   if(item_cnt) {
-    i = dia_list(txt_menu, 32, NULL, items, last_item, align_left);
-    if(i > 0) {
-      last_item = i;
+    i = dia_list(txt_menu, 36, NULL, items, last_item, align_left);
+
+    if(i == 0) rc = -1;
+
+    if(i > 0 && values[i - 1]) {
+      str_copy(&last_part, values[i - 1]);
       str_copy(partition, values[i - 1]);
       rc = 0;
     }
+
+    if(i == item_mk_part) {
+      do {
+        i = dia_list("create a swap partition", 36, NULL, items2, last_item2, align_left);
+        if(i > 0 && values2[i - 1]) {
+          str_copy(&last_part, values2[i - 1]);
+          dev = long_dev(values2[i - 1]);
+          sprintf(buf, "/sbin/mkswap %s >/dev/null 2>&1", dev);
+          fprintf(stderr, "mkswap %s\n", dev);
+          if(!system(buf)) {
+            fprintf(stderr, "swapon %s\n", dev);
+            if(swapon(dev, 0)) {
+              fprintf(stderr, "swapon: ");
+              perror(dev);
+              dia_message(txt_get(TXT_ERROR_SWAP), MSGTYPE_ERROR);
+            }
+            else {
+              rc = 0;
+            }
+          }
+          else {
+            dia_message("mkswap failed", MSGTYPE_ERROR);
+          }
+        }
+      }
+      while(rc && i);
+    }
+    else if(i == item_mk_file) {
+      do {
+        i = dia_list("select partition for swap file", 36, NULL, items3, last_item3, align_left);
+        if(i > 0 && values3[i - 1]) {
+          str_copy(&last_part, values3[i - 1]);
+          dev = long_dev(values3[i - 1]);
+          util_fstype(dev, &module);
+          if(module) mod_modprobe(module, NULL);
+          j = util_mount_rw(dev, config.mountpoint.swap);
+          if(j) {
+            dia_message("mount failed", MSGTYPE_ERROR);
+          }
+          else {
+            char *tmp, file[256];
+            int fd;
+            window_t win;
+            unsigned swap_size = config.swap_file_size << (20 - 18);     /* in 256k chunks */
+
+            sprintf(file, "%s/suseswap.img", config.mountpoint.swap);
+
+            tmp = calloc(1, 1 << 18);
+
+            fd = open(file, O_WRONLY | O_CREAT | O_TRUNC, 0644);
+            if(fd >= 0) {
+              sprintf(buf, "creating swap file 'suseswap.img' (%u MB)", config.swap_file_size);
+              dia_status_on(&win, buf);
+              for(j = 0; j < swap_size; j++) {
+                if(write(fd, tmp, 1 << 18) != 1 << 18) break;
+                fsync(fd);
+                dia_status(&win, (j + 1) * 100 / swap_size);
+              }
+              close(fd);
+              dia_status_off(&win);
+            }
+            free(tmp);
+
+            if(j != swap_size) {
+              dia_message("failed to create swapfile", MSGTYPE_ERROR);
+            }
+            else {
+              sprintf(buf, "/sbin/mkswap %s >/dev/null 2>&1", file);
+              fprintf(stderr, "mkswap %s\n", file);
+              if(!system(buf)) {
+                fprintf(stderr, "swapon %s\n", file);
+                if(swapon(file, 0)) {
+                  fprintf(stderr, "swapon: ");
+                  perror(file);
+                  dia_message(txt_get(TXT_ERROR_SWAP), MSGTYPE_ERROR);
+                }
+                else {
+                  umount2(config.mountpoint.swap, MNT_DETACH);
+                  rc = 0;
+                }
+              }
+              else {
+                dia_message("mkswap failed", MSGTYPE_ERROR);
+              }
+            }
+            if(rc) util_umount(config.mountpoint.swap);
+          }
+        }
+      }
+      while(rc && i);
+    }
   }
   else {
     str_copy(&tmp, *partition);
@@ -585,9 +734,17 @@
     }
   }
 
-  for(i = 0; i < item_cnt; i++) { free(items[i]); free(values[i]); }
-  free(items);
-  free(values);
+  for(i = 0; i < item_cnt1; i++) { free(items1[i]); free(values1[i]); }
+  free(items1);
+  free(values1);
+  for(i = 0; i < item_cnt2; i++) { free(items2[i]); free(values2[i]); }
+  free(items2);
+  free(values2);
+  for(i = 0; i < item_cnt3; i++) { free(items3[i]); free(values3[i]); }
+  free(items3);
+  free(values3);
+
+  // fprintf(stderr, "rc = %d\n", rc);
 
   return rc;
 }
@@ -1132,10 +1289,7 @@
   i = 0;
   util_free_mem();
   if(config.addswap) {
-    i = ask_for_swap(
-      config.memory.min_yast_text - config.memory.min_free,
-      txt_get(TXT_LOW_MEMORY2)
-    );
+    i = ask_for_swap(-1, txt_get(TXT_LOW_MEMORY2));
   }
 
   if(i == -1) {
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/linuxrc-2.1.24/linuxrc.c new/linuxrc-2.1.25/linuxrc.c
--- old/linuxrc-2.1.24/linuxrc.c        2007-03-16 14:56:24.000000000 +0100
+++ new/linuxrc-2.1.25/linuxrc.c        2007-05-24 12:36:33.000000000 +0200
@@ -275,6 +275,12 @@
 
   if(err) {
     util_disp_init();
+
+#if 0
+    extern int ask_for_swap(int size, char *msg);
+    ask_for_swap(-1, "Foo Bar");
+#endif
+
     lxrc_main_menu();
   }
 
@@ -756,6 +762,7 @@
   config.mountpoint.live = strdup("/mounts/live");
   config.mountpoint.update = strdup("/mounts/update");
   config.mountpoint.instdata = strdup("/var/adm/mount");
+  config.mountpoint.swap = strdup("/mounts/swap");
 
   config.setupcmd = strdup("setctsid `showconsole` inst_setup yast");
   config.update.dst = strdup("/update");
@@ -795,6 +802,8 @@
   config.memory.min_modules =    64 * 1024;
   config.memory.load_image =    200 * 1024;
 
+  config.swap_file_size = 1024;                /* 1024 MB */
+
   if(util_check_exist("/sbin/mount.smbfs")) {
     str_copy(&config.net.cifs.binary, "/sbin/mount.smbfs");
     str_copy(&config.net.cifs.module, "smbfs");
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/linuxrc-2.1.24/Makefile new/linuxrc-2.1.25/Makefile
--- old/linuxrc-2.1.24/Makefile 2006-09-11 17:41:36.000000000 +0200
+++ new/linuxrc-2.1.25/Makefile 2007-05-22 17:23:36.000000000 +0200
@@ -1,6 +1,6 @@
 CC     = gcc
 CFLAGS = -c -g -O2 -Wall -Wno-pointer-sign
-LDFLAGS        = -lhd
+LDFLAGS        = -lhd -lblkid
 
 SRC    = $(filter-out inflate.c,$(wildcard *.c))
 INC    = $(wildcard *.h)
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/linuxrc-2.1.24/module.c new/linuxrc-2.1.25/module.c
--- old/linuxrc-2.1.24/module.c 2006-10-19 12:11:55.000000000 +0200
+++ new/linuxrc-2.1.25/module.c 2007-05-23 14:01:15.000000000 +0200
@@ -195,7 +195,7 @@
   sprintf(tmp, "%s/" MODULE_CONFIG, config.module.dir);
   file_read_modinfo(tmp);
 
-  if(autoload) {
+  if(autoload && !config.test) {
     for(ml = config.module.list; ml; ml = ml->next) {
       if(ml->type == 0 /* 'autoload' section */ && ml->autoload) {
         mod_modprobe(ml->name, ml->param);
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/linuxrc-2.1.24/rootimage.c new/linuxrc-2.1.25/rootimage.c
--- old/linuxrc-2.1.24/rootimage.c      2007-02-05 15:43:13.000000000 +0100
+++ new/linuxrc-2.1.25/rootimage.c      2007-05-23 17:47:07.000000000 +0200
@@ -193,52 +193,42 @@
  */
 int ask_for_swap(int size, char *msg)
 {
-  int i, did_init = 0;
-  char tmp[256];
+  int i, j, did_init = 0;
   char *partition = NULL;
-  char *argv[] = { NULL, tmp };
+  char *argv[] = { NULL, NULL };
 
-  if(config.memory.current >= config.memory.min_free + size) return 0;
+  if(size >= 0 && config.memory.current >= config.memory.min_free + size) return 0;
 
   if(!config.win) {
     util_disp_init();
     did_init = 1;
   }
-  sprintf(tmp, "%s\n\n%s", msg, txt_get(TXT_ADD_SWAP));
-  i = dia_contabort(tmp, YES);
-  util_free_mem();
-  if(i != YES) {
-    if(did_init) util_disp_done();
-    return -1;
-  }
 
-  if(config.memory.current >= config.memory.min_free + size) {
-    if(did_init) util_disp_done();
-    return 0;
-  }
+#if 0
+  // sprintf(tmp, "%s\n\n%s", msg, txt_get(TXT_ADD_SWAP));
+#endif
 
   do {
-    if(inst_choose_partition(&partition, 1, txt_get(TXT_CHOOSE_SWAP), txt_get(TXT_ENTER_SWAP))) {
-      i = -1;
-      break;
-    }
-
-    if(partition) {
-      sprintf(tmp, "/dev/%s", partition);
+    j = inst_choose_partition(&partition, 1, txt_get(TXT_ADD_SWAP), txt_get(TXT_ENTER_SWAP));
+    
+    if(j == 0 && partition) {
+      argv[1] = long_dev(partition);
+      fprintf(stderr, "swapon %s\n", argv[1]);
       i = util_swapon_main(2, argv);
       if(i) {
         dia_message(txt_get(TXT_ERROR_SWAP), MSGTYPE_ERROR);
+        j = 1;
       }
     }
     util_free_mem();
   }
-  while(i);
+  while(j > 0);
 
   str_copy(&partition, NULL);
 
   if(did_init) util_disp_done();
 
-  return i;
+  return j;
 }
 
 
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/linuxrc-2.1.24/util.c new/linuxrc-2.1.25/util.c
--- old/linuxrc-2.1.24/util.c   2007-03-06 17:19:25.000000000 +0100
+++ new/linuxrc-2.1.25/util.c   2007-05-23 17:20:27.000000000 +0200
@@ -8,7 +8,7 @@
 
 #define __LIBRARY__
 
-#define _GNU_SOURCE    /* stat64 */
+#define _GNU_SOURCE    /* stat64, asprintf */
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -1164,6 +1164,9 @@
   );
   slist_append_str(&sl0, buf);
 
+  sprintf(buf, "swap file size: %u MB", config.swap_file_size);
+  slist_append_str(&sl0, buf);
+
   sprintf(buf,
     "InstsysID: %s%s",
     config.instsys_id ?: "unset",
@@ -5021,3 +5024,79 @@
   }
 }
 
+
+char *blk_ident(char *dev)
+{
+  char *type, *label, *size;
+  static char *id = NULL;
+
+  if(id) {
+    free(id);
+    id = NULL;
+  }
+
+  if(!dev) return id;
+
+  if(!config.blkid.cache) blkid_get_cache(&config.blkid.cache, "/dev/null");
+
+  type = blkid_get_tag_value(config.blkid.cache, "TYPE", dev);
+  label = blkid_get_tag_value(config.blkid.cache, "LABEL", dev);
+  size = blk_size_str(dev);
+
+  if(!size) return id;
+
+  asprintf(&id, "%s, %s%s%s", size, type ?: "no fs", label ? ", " : "", label ?: "");
+
+  free(type);
+  free(label);
+
+  return id;
+}
+
+
+char *blk_size_str(char *dev)
+{
+  uint64_t size;
+  static char *s = NULL, unit;
+
+  if(s) {
+    free(s);
+    s = NULL;
+  }
+
+  size = blk_size(dev);
+
+  unit = 'k';
+  if(size >= (1000 << 10)) { unit = 'M'; size >>= 10; }
+  if(size >= (1000 << 10)) { unit = 'G'; size >>= 10; }
+  if(size >= (1000 << 10)) { unit = 'T'; size >>= 10; }
+  if(size >= (1000 << 10)) { unit = 'P'; size >>= 10; }
+  if(size >= (1000 << 10)) { unit = 'E'; size >>= 10; }
+  if(size >= (1000 << 10)) { unit = 'Z'; size >>= 10; }
+  if(size >= (1000 << 10)) { unit = 'Y'; size >>= 10; }
+
+  if(size >= 10 * (1 << 10)) {
+    size = (size + 512) >> 10;
+    asprintf(&s, "%u %cB", (unsigned) size, unit);
+  }
+  else {
+    size = ((10 * size) + 512) >> 10;
+    asprintf(&s, "%u.%u %cB", ((unsigned) size) / 10, ((unsigned) size) % 10, unit);
+  }
+  
+  return s;
+}
+
+
+uint64_t blk_size(char *dev)
+{
+  int fd;
+  blkid_loff_t size;
+
+  fd = open(dev, O_RDONLY | O_NONBLOCK);
+  size = fd >= 0 ? blkid_get_dev_size(fd) : 0;
+  close(fd);
+
+  return size >= 0 ? size : 0;
+}
+
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/linuxrc-2.1.24/util.h new/linuxrc-2.1.25/util.h
--- old/linuxrc-2.1.24/util.h   2007-02-05 15:43:26.000000000 +0100
+++ new/linuxrc-2.1.25/util.h   2007-05-23 14:51:17.000000000 +0200
@@ -157,3 +157,7 @@
 
 void read_iscsi_ibft(void);
 
+char *blk_size_str(char *dev);
+uint64_t blk_size(char *dev);
+char *blk_ident(char *dev);
+
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/linuxrc-2.1.24/VERSION new/linuxrc-2.1.25/VERSION
--- old/linuxrc-2.1.24/VERSION  2007-03-26 13:54:41.000000000 +0200
+++ new/linuxrc-2.1.25/VERSION  2007-05-07 15:53:08.000000000 +0200
@@ -1 +1 @@
-2.1.24
+2.1.25


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



Remember to have fun...

---------------------------------------------------------------------
To unsubscribe, e-mail: opensuse-commit+unsubscribe@xxxxxxxxxxxx
For additional commands, e-mail: opensuse-commit+help@xxxxxxxxxxxx

< Previous Next >
This Thread