-./0arch-timestamps0 1127716375 1127716584
+./0arch-timestamps0 1127716589 1127716862
./BUGS 1109049412 1000991730
./COPYING 1109049412 1000991730
-./ChangeLog 1127716501 1127716581
+./ChangeLog 1127716742 1127716860
./Config 1109049412 1002101497
./INSTALL 1109049412 1000991730
./README 1109049412 1044766458
./doc/examples/simpleboot.chrp 1109049412 1068017750
./doc/examples/yaboot.conf.multi-boot 1109049412 1006348765
./doc/examples/yaboot.conf.rs6000 1109049412 1006348765
-./doc/examples 1127716584 1068017750
+./doc/examples 1127716657 1068017750
./doc/yaboot-howto.de.sgml 1109049413 1096186109
./doc/yaboot-howto.sgml 1109049413 1096186082
-./doc 1127716584 1096186109
+./doc 1127716657 1096186109
./etc/yaboot.conf 1109049413 1006348765
-./etc 1127716584 1007269243
+./etc 1127716657 1007269243
./first/ofboot 1118285749 1065311880
-./first 1127716584 1071492158
+./first 1127716657 1071492158
./include/asm/elf.h 1109049413 1000991730
./include/asm/ppc_asm.tmpl 1109049413 1000991730
./include/asm/processor.h 1109049413 1000991730
-./include/asm 1127716584 1007269243
+./include/asm 1127716657 1007269243
./include/bootinfo.h 1109049413 1007200690
./include/byteorder.h 1109049413 1000991730
./include/cfg.h 1109049413 1007200690
./include/debug.h 1109049413 1007200690
./include/errors.h 1109049413 1007200690
./include/et/com_err.h 1109049413 1000991731
-./include/et 1127716584 1007269243
+./include/et 1127716657 1007269243
./include/ext2fs/bitops.h 1109049413 1003927524
./include/ext2fs/ext2_err.h 1109049413 1003927524
./include/ext2fs/ext2_io.h 1109049413 1003927524
./include/ext2fs/ext2fs.h 1109049413 1003927524
-./include/ext2fs 1127716584 1007269243
+./include/ext2fs 1127716657 1007269243
./include/file.h 1109049413 1007200690
./include/fs.h 1109049413 1007200690
./include/linux/elf.h 1109049413 1000991731
./include/linux/iso_fs.h 1109049413 1000991731
./include/linux/stat.h 1109049413 1000991731
./include/linux/types.h 1109049413 1000991731
-./include/linux 1127716584 1007269243
+./include/linux 1127716657 1007269243
./include/mac-part.h 1109049413 1007200690
./include/md5.h 1109049413 1000991730
./include/prom.h 1109049413 1007200690
./include/reiserfs/reiserfs.h 1109049413 1025684115
-./include/reiserfs 1127716584 1025684115
+./include/reiserfs 1127716657 1025684115
./include/setjm2.h 1109049413 1000991730
./include/setjmp.h 1109049413 1000991730
./include/stdlib.h 1109049413 1000991730
./include/swab.h 1109049413 1000991730
./include/types.h 1109049413 1000991730
./include/xfs/xfs.h 1109049413 1002101334
-./include/xfs 1127716584 1007269244
+./include/xfs 1127716658 1007269244
./include/yaboot.h 1109049413 1007200690
./include/amiga-part.h 1116558586 1116558522
./include/fdisk-part.h 1120953080 1120952841
./include/partition.h 1120953080 1120952841
-./include 1127716584 1120952841
+./include 1127716657 1120952841
./lib/ctype.c 1109049413 1000991731
./lib/libext2fs.a 1109049413 1003927524
./lib/malloc.c 1122610545 1007200690
./lib/strtol.c 1109049413 1000991731
./lib/vsprintf.c 1109049413 1000991731
./lib/strstr.c 1119929028 1116476589
-./lib 1127716584 1116476589
+./lib 1127716658 1116476589
./man/bootstrap.8 1116558691 1000991731
./man/mkofboot.8 1116558691 1006348765
./man/ofpath.8 1116558691 1000991731
./man/yabootconfig.8 1116558691 1027929577
./man/ybin.8 1116558691 1006348765
./man/yaboot.8 1125032949 1090699543
-./man 1127716584 1116476667
+./man 1127716658 1116476667
./man.patch 1116558699 1006348761
./second/cache.S 1127716272 1007200690
./second/cfg.c 1127716272 1007200690
./second/md5.c 1127716272 1032059532
./second/prom.c 1127716272 1067937197
./second/setjmp.S 1127716272 1000991732
-./second/file.c 1127716272 1122611207
./second/partition.c 1127716272 1122611207
./second/fs_of.c 1127716272 1123038648
-./second/yaboot.c.orig 1127716492 1122611207
-./second/yaboot.c 1127716492 1127716492
-./second 1127716584 1127716492
+./second/yaboot.c 1127716589 1127716492
+./second/file.c 1127716734 1127716734
+./second 1127716862 1127716734
./util/elfextract.c 1109049413 1007303237
./util/addnote.c 1109049413 1107321884
-./util 1127716584 1107321884
+./util 1127716658 1107321884
./ybin/mkofboot 1127716369 1073219938
./ybin/ofpath 1120448537 1120448442
./ybin/yabootconfig 1117166139 1089576743
./ybin/ybin 1120448039 1120447943
-./ybin 1127716584 1120448442
+./ybin 1127716658 1120448442
./Makefile 1127716376 1127716319
-. 1127716584 1127716581
+. 1127716862 1127716860
extern char bootdevice[1024];
+static char *netdev_path_to_filename(const char *path)
+{
+ char *tmp, *args, *filename;
+ size_t len;
+
+ DEBUG_F("path = %s\n", path);
+
+ if (!path)
+ return NULL;
+
+ args = strrchr(path, ':');
+ if (!args)
+ return NULL;
+
+ /* The obp-tftp device arguments should be at the end of
+ * the argument list. Skip over any extra arguments (promiscuous,
+ * speed, duplex, bootp, rarp).
+ */
+
+ tmp = strstr(args, "promiscuous");
+ if (tmp && tmp > args)
+ args = tmp + strlen("promiscuous");
+
+ tmp = strstr(args, "speed=");
+ if (tmp && tmp > args)
+ args = tmp + strlen("speed=");
+
+ tmp = strstr(args, "duplex=");
+ if (tmp && tmp > args)
+ args = tmp + strlen("duplex=");
+
+ tmp = strstr(args, "bootp");
+ if (tmp && tmp > args)
+ args = tmp + strlen("bootp");
+
+ tmp = strstr(args, "rarp");
+ if (tmp && tmp > args)
+ args = tmp + strlen("rarp");
+
+ args = strchr(args, ',');
+ if (!args)
+ return NULL;
+
+ tmp = args;
+ tmp--;
+ /* If the preceding character is ':' then there were no
+ * non-obp-tftp arguments and we know we're right up to the
+ * filename. Otherwise, we must advance args once more.
+ */
+ args++;
+ if (*tmp != ':') {
+ args = strchr(args, ',');
+ if (!args)
+ return NULL;
+ args++;
+ }
+
+ /* filename may be empty; e.g. enet:192.168.1.1,,192.168.1.2 */
+ if (*args == ',') {
+ DEBUG_F("null filename\n");
+ return NULL;
+ }
+
+ /* Now see whether there are more args following the filename. */
+ tmp = strchr(args, ',');
+ if (!tmp)
+ len = strlen(args) + 1;
+ else
+ len = tmp - args + 1;
+
+ filename = malloc(len);
+ if (!filename)
+ return NULL;
+
+ strncpy(filename, args, len);
+ filename[len - 1] = '\0';
+
+ DEBUG_F("filename = %s\n", filename);
+ return filename;
+}
+
+static char *netdev_path_to_dev(const char *path)
+{
+ char *dev, *tmp;
+ size_t len;
+
+ DEBUG_F("path = %s\n", path);
+
+ if (!path)
+ return NULL;
+
+ tmp = strchr(path, ':');
+ if (!tmp)
+ return strdup(path);
+ tmp++;
+
+ len = tmp - path + 1;
+
+ dev = malloc(len);
+ if (dev) {
+ strncpy(dev, path, len);
+ dev[len - 1] = '\0';
+ }
+ return dev;
+}
+
/* This function follows the device path in the devtree and separates
the device name, partition number, and other datas (mostly file name)
the string passed in parameters is changed since 0 are put in place
char *ptr;
char *ipath = NULL;
char *defdev = NULL;
+ int device_kind;
result->dev = NULL;
result->part = -1;
else if (!(ipath = strdup(imagepath)))
return 0;
- if (defdevice)
+ if (defdevice) {
defdev = strdup(defdevice);
+ device_kind = prom_get_devtype(defdev);
+ } else
+ device_kind = prom_get_devtype(ipath);
- if (defdev) {
- if (!strstr(defdev, "ethernet") && !strstr(defdev, "enet")) {
- if ((ptr = strrchr(defdev, ':')) != NULL)
- *ptr = 0; /* remove trailing : from defdevice if necessary */
- }
- } else {
- return 0;
+ if (device_kind != FILE_DEVICE_NET && strchr(defdev, ':') != NULL) {
+ if ((ptr = strrchr(defdev, ':')) != NULL)
+ *ptr = 0; /* remove trailing : from defdevice if necessary */
}
- /* if there is no : then there is no filename or partition. must
- use strrchr() since enet:,10.0.0.1,file is legal */
-
- if (strchr(ipath, ':') != NULL) {
+ /* This will not properly handle an obp-tftp argument list
+ * with elements after the filename; that is handled below.
+ */
+ if (device_kind != FILE_DEVICE_NET && strchr(ipath, ':') != NULL) {
if ((ptr = strrchr(ipath, ',')) != NULL) {
char *colon = strrchr(ipath, ':');
/* If a ':' occurs *after* a ',', then we assume that there is
}
}
- if (strstr(ipath, "ethernet") || strstr(ipath, "enet"))
- if ((ptr = strstr(ipath, "bootp")) != NULL) { /* `n' key booting boots enet:bootp */
- *ptr = 0;
- result->dev = strdup(ipath);
- } else
- result->dev = strdup(ipath);
- else if ((ptr = strchr(ipath, ':')) != NULL) {
+ if (device_kind == FILE_DEVICE_NET) {
+ if (strchr(ipath, ':'))
+ result->file = netdev_path_to_filename(ipath);
+ else
+ result->file = strdup(ipath);
+
+ if (!defdev)
+ result->dev = netdev_path_to_dev(ipath);
+ } else if ((ptr = strchr(ipath, ':')) != NULL) {
*ptr = 0;
result->dev = strdup(ipath);
if (*(ptr+1))