Module Name:    src
Committed By:   gson
Date:           Tue Jan 10 21:02:48 UTC 2012

Modified Files:
        src/distrib/utils/sysinst: defs.h main.c menus.mi msg.mi.de msg.mi.en
            msg.mi.es msg.mi.fr msg.mi.pl net.c util.c

Log Message:
Add support for installing source sets as discussed on tech-install,
with improved German translations from Martin Husemann and Julian
Djamil Fagir.  French, Spanish, and Polish translations are
still needed.  OK christos, riz.


To generate a diff of this commit:
cvs rdiff -u -r1.160 -r1.161 src/distrib/utils/sysinst/defs.h
cvs rdiff -u -r1.62 -r1.63 src/distrib/utils/sysinst/main.c
cvs rdiff -u -r1.43 -r1.44 src/distrib/utils/sysinst/menus.mi
cvs rdiff -u -r1.60 -r1.61 src/distrib/utils/sysinst/msg.mi.de
cvs rdiff -u -r1.168 -r1.169 src/distrib/utils/sysinst/msg.mi.en
cvs rdiff -u -r1.38 -r1.39 src/distrib/utils/sysinst/msg.mi.es
cvs rdiff -u -r1.118 -r1.119 src/distrib/utils/sysinst/msg.mi.fr
cvs rdiff -u -r1.77 -r1.78 src/distrib/utils/sysinst/msg.mi.pl
cvs rdiff -u -r1.129 -r1.130 src/distrib/utils/sysinst/net.c
cvs rdiff -u -r1.172 -r1.173 src/distrib/utils/sysinst/util.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/distrib/utils/sysinst/defs.h
diff -u src/distrib/utils/sysinst/defs.h:1.160 src/distrib/utils/sysinst/defs.h:1.161
--- src/distrib/utils/sysinst/defs.h:1.160	Thu Jan  5 22:18:36 2012
+++ src/distrib/utils/sysinst/defs.h	Tue Jan 10 21:02:47 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: defs.h,v 1.160 2012/01/05 22:18:36 christos Exp $	*/
+/*	$NetBSD: defs.h,v 1.161 2012/01/10 21:02:47 gson Exp $	*/
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -122,6 +122,13 @@ enum {
     SET_MD_2,		/* Machine dependent set */
     SET_MD_3,		/* Machine dependent set */
     SET_MD_4,		/* Machine dependent set */
+    
+    /* Source sets */
+    SET_SYSSRC,
+    SET_SRC,
+    SET_SHARESRC,
+    SET_GNUSRC,
+    SET_XSRC,
 
     SET_LAST,
     SET_GROUP,		/* Start of submenu */
@@ -144,6 +151,9 @@ enum {
 /* All machine dependent sets */
 #define SET_MD SET_MD_1, SET_MD_2, SET_MD_3, SET_MD_4
 
+/* All source sets */
+#define SET_SOURCE SET_SYSSRC, SET_SRC, SET_SHARESRC, SET_GNUSRC, SET_XSRC
+
 /* Set list flags */
 #define SFLAG_MINIMAL	1
 #define	SFLAG_NOX	2
@@ -278,11 +288,17 @@ int  clean_xfer_dir;
 #define SYSINST_FTP_DIR		"pub/NetBSD/NetBSD-" REL
 #endif
 
-/* Abs. path we extract from */
-char ext_dir[STRSIZE];
+/* Abs. path we extract binary sets from */
+char ext_dir_bin[STRSIZE];
+
+/* Abs. path we extract source sets from */
+char ext_dir_src[STRSIZE];
+
+/* Place we look for binary sets in all fs types */
+char set_dir_bin[STRSIZE];
 
-/* Place we look in all fs types */
-char set_dir[STRSIZE];
+/* Place we look for source sets in all fs types */
+char set_dir_src[STRSIZE];
 
 struct {
     char host[STRSIZE];
@@ -427,6 +443,9 @@ int	check_lfs_progs(void);
 void	init_set_status(int);
 void	customise_sets(void);
 void	umount_mnt2(void);
+int 	set_is_source(const char *);
+const char *set_dir_for_set(const char *);
+const char *ext_dir_for_set(const char *);
 
 /* from target.c */
 #if defined(DEBUG)  ||	defined(DEBUG_ROOT)

Index: src/distrib/utils/sysinst/main.c
diff -u src/distrib/utils/sysinst/main.c:1.62 src/distrib/utils/sysinst/main.c:1.63
--- src/distrib/utils/sysinst/main.c:1.62	Thu Jan  5 21:29:24 2012
+++ src/distrib/utils/sysinst/main.c	Tue Jan 10 21:02:47 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: main.c,v 1.62 2012/01/05 21:29:24 christos Exp $	*/
+/*	$NetBSD: main.c,v 1.63 2012/01/10 21:02:47 gson Exp $	*/
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -80,10 +80,12 @@ static const struct f_arg fflagopts[] = 
 	{"release", REL, rel, sizeof rel},
 	{"machine", MACH, machine, sizeof machine},
 	{"xfer dir", "/usr/INSTALL", xfer_dir, sizeof xfer_dir},
-	{"ext dir", "", ext_dir, sizeof ext_dir},
+	{"ext dir", "", ext_dir_bin, sizeof ext_dir_bin},
+	{"ext src dir", "", ext_dir_src, sizeof ext_dir_src},
 	{"ftp host", SYSINST_FTP_HOST, ftp.host, sizeof ftp.host},
 	{"ftp dir", SYSINST_FTP_DIR, ftp.dir, sizeof ftp.dir},
-	{"ftp prefix", "/" MACH "/binary/sets", set_dir, sizeof set_dir},
+	{"ftp prefix", "/" MACH "/binary/sets", set_dir_bin, sizeof set_dir_bin},
+	{"ftp src prefix", "/source/sets", set_dir_src, sizeof set_dir_src},
 	{"ftp user", "ftp", ftp.user, sizeof ftp.user},
 	{"ftp pass", "", ftp.pass, sizeof ftp.pass},
 	{"ftp proxy", "", ftp.proxy, sizeof ftp.proxy},

Index: src/distrib/utils/sysinst/menus.mi
diff -u src/distrib/utils/sysinst/menus.mi:1.43 src/distrib/utils/sysinst/menus.mi:1.44
--- src/distrib/utils/sysinst/menus.mi:1.43	Sun Oct 30 00:30:56 2011
+++ src/distrib/utils/sysinst/menus.mi	Tue Jan 10 21:02:47 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: menus.mi,v 1.43 2011/10/30 00:30:56 jakllsch Exp $	*/
+/*	$NetBSD: menus.mi,v 1.44 2012/01/10 21:02:47 gson Exp $	*/
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -246,8 +246,10 @@ menu ftpsource, y=-4, x=0, w=70, no box,
 		action { src_prompt(MSG_Host, ftp.host, sizeof ftp.host); };
 	option {src_legend(menu, MSG_Base_dir, ftp.dir);},
 		action { src_prompt(MSG_Base_dir, ftp.dir, sizeof ftp.dir); };
-	option {src_legend(menu, MSG_Set_dir, set_dir);},
-		action { src_prompt(MSG_Set_dir, set_dir, sizeof set_dir); };
+	option {src_legend(menu, MSG_Set_dir_bin, set_dir_bin);},
+		action { src_prompt(MSG_Set_dir_bin, set_dir_bin, sizeof set_dir_bin); };
+	option {src_legend(menu, MSG_Set_dir_src, set_dir_src);},
+		action { src_prompt(MSG_Set_dir_src, set_dir_src, sizeof set_dir_src); };
 	option {src_legend(menu, MSG_User, ftp.user);},
 		action { src_prompt(MSG_User, ftp.user, sizeof ftp.user);
 			ftp.pass[0] = 0;
@@ -286,8 +288,10 @@ menu nfssource, y=-4, x=0, w=70, no box,
 		action { src_prompt(MSG_Host, nfs_host, sizeof nfs_host); };
 	option {src_legend(menu, MSG_Base_dir, nfs_dir);},
 		action { src_prompt(MSG_Base_dir, nfs_dir, sizeof nfs_dir); };
-	option {src_legend(menu, MSG_Set_dir, set_dir);},
-		action { src_prompt(MSG_Set_dir, set_dir, sizeof set_dir); };
+	option {src_legend(menu, MSG_Set_dir_bin, set_dir_bin);},
+		action { src_prompt(MSG_Set_dir_bin, set_dir_bin, sizeof set_dir_bin); };
+	option {src_legend(menu, MSG_Set_dir_src, set_dir_src);},
+		action { src_prompt(MSG_Set_dir_src, set_dir_src, sizeof set_dir_src); };
 
 menu fdremount, title MSG_What_do_you_want_to_do;
 	option MSG_Try_again, exit, action { *(int *)arg = SET_CONTINUE; };
@@ -322,8 +326,10 @@ menu cdromsource, y=-4, x=0, w=70, no bo
 	display action { msg_display_add(MSG_cdromsource); };
 	option {src_legend(menu, MSG_Device, cdrom_dev);},
 		action { src_prompt(MSG_dev, cdrom_dev, sizeof cdrom_dev); };
-	option {src_legend(menu, MSG_Set_dir, set_dir);},
-		action { src_prompt(MSG_Set_dir, set_dir, sizeof set_dir); };
+	option {src_legend(menu, MSG_Set_dir_bin, set_dir_bin);},
+		action { src_prompt(MSG_Set_dir_bin, set_dir_bin, sizeof set_dir_bin); };
+	option {src_legend(menu, MSG_Set_dir_src, set_dir_src);},
+		action { src_prompt(MSG_Set_dir_src, set_dir_src, sizeof set_dir_src); };
 
 menu localfssource, y=-4, x=0, w=70, no box, no clear, exitstring MSG_Continue;
 	display action { msg_display(MSG_localfssource); };
@@ -333,15 +339,19 @@ menu localfssource, y=-4, x=0, w=70, no 
 		action { src_prompt(MSG_filesys, localfs_fs, sizeof localfs_fs); };
 	option {src_legend(menu, MSG_Base_dir, localfs_dir);},
 		action { src_prompt(MSG_Base_dir, localfs_dir, sizeof localfs_dir);};
-	option {src_legend(menu, MSG_Set_dir, set_dir);},
-		action { src_prompt(MSG_Set_dir, set_dir, sizeof set_dir); };
+	option {src_legend(menu, MSG_Set_dir_bin, set_dir_bin);},
+		action { src_prompt(MSG_Set_dir_bin, set_dir_bin, sizeof set_dir_bin); };
+	option {src_legend(menu, MSG_Set_dir_src, set_dir_src);},
+		action { src_prompt(MSG_Set_dir_src, set_dir_src, sizeof set_dir_src); };
 
 menu localdirsource, y=-4, x=0, w=70, no box, no clear, exitstring MSG_Continue;
 	display action { msg_display(MSG_localdir); };
 	option {src_legend(menu, MSG_Base_dir, localfs_dir);},
 		action { src_prompt(MSG_Base_dir, localfs_dir, 60); };
-	option {src_legend(menu, MSG_Set_dir, set_dir);},
-		action { src_prompt(MSG_Set_dir, set_dir, 60); };
+	option {src_legend(menu, MSG_Set_dir_bin, set_dir_bin);},
+		action { src_prompt(MSG_Set_dir_bin, set_dir_bin, 60); };
+	option {src_legend(menu, MSG_Set_dir_src, set_dir_src);},
+		action { src_prompt(MSG_Set_dir_src, set_dir_src, 60); };
 
 menu namesrv6, title MSG_Select_IPv6_DNS_server;
 	option "google-public-dns-a.google.com", exit, action

Index: src/distrib/utils/sysinst/msg.mi.de
diff -u src/distrib/utils/sysinst/msg.mi.de:1.60 src/distrib/utils/sysinst/msg.mi.de:1.61
--- src/distrib/utils/sysinst/msg.mi.de:1.60	Mon Jan  9 01:51:47 2012
+++ src/distrib/utils/sysinst/msg.mi.de	Tue Jan 10 21:02:47 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: msg.mi.de,v 1.60 2012/01/09 01:51:47 riz Exp $	*/
+/*	$NetBSD: msg.mi.de,v 1.61 2012/01/10 21:02:47 gson Exp $	*/
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -829,6 +829,24 @@ message set_X11_servers
 message set_X11_prog
 {X11 Programmierung}
 
+message set_source
+{Quelltexte}
+
+message set_syssrc
+{Kernel Quelltexte}
+
+message set_src
+{Basissystem Quelltexte}
+
+message set_sharesrc
+{Share Quelltexte}
+
+message set_gnusrc
+{GNU Quelltexte}
+
+message set_xsrc
+{X11 Quelltexte}
+
 message cur_distsets_row
 {%-27s %3s}
 
@@ -966,7 +984,8 @@ message Custom_installation {Benutzerdef
 message hidden {** versteckt **}
 message Host {Host}
 message Base_dir {Basispfad}
-message Set_dir {Verzeichnis}
+message Set_dir_bin {Bin�rpaket-Verzeichnis}
+message Set_dir_src {Quelltext-Verzeichnis}
 message Xfer_dir {Zwischenspeicher}
 message User {Benutzer}
 message Password {Passwort}

Index: src/distrib/utils/sysinst/msg.mi.en
diff -u src/distrib/utils/sysinst/msg.mi.en:1.168 src/distrib/utils/sysinst/msg.mi.en:1.169
--- src/distrib/utils/sysinst/msg.mi.en:1.168	Mon Jan  9 01:51:47 2012
+++ src/distrib/utils/sysinst/msg.mi.en	Tue Jan 10 21:02:47 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: msg.mi.en,v 1.168 2012/01/09 01:51:47 riz Exp $	*/
+/*	$NetBSD: msg.mi.en,v 1.169 2012/01/10 21:02:47 gson Exp $	*/
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -769,6 +769,24 @@ message set_X11_servers
 message set_X11_prog
 {X11 programming}
 
+message set_source
+{Source sets}
+
+message set_syssrc
+{Kernel sources}
+
+message set_src
+{Base sources}
+
+message set_sharesrc
+{Share sources}
+
+message set_gnusrc
+{GNU sources}
+
+message set_xsrc
+{X11 sources}
+
 message cur_distsets_row
 {%-27s %3s}
 
@@ -906,7 +924,8 @@ message Custom_installation {Custom inst
 message hidden {** hidden **}
 message Host {Host}
 message Base_dir {Base directory}
-message Set_dir {Set directory}
+message Set_dir_bin {Binary set directory}
+message Set_dir_src {Source set directory}
 message Xfer_dir {Transfer directory}
 message User {User}
 message Password {Password}

Index: src/distrib/utils/sysinst/msg.mi.es
diff -u src/distrib/utils/sysinst/msg.mi.es:1.38 src/distrib/utils/sysinst/msg.mi.es:1.39
--- src/distrib/utils/sysinst/msg.mi.es:1.38	Mon Jan  9 01:51:47 2012
+++ src/distrib/utils/sysinst/msg.mi.es	Tue Jan 10 21:02:47 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: msg.mi.es,v 1.38 2012/01/09 01:51:47 riz Exp $	*/
+/*	$NetBSD: msg.mi.es,v 1.39 2012/01/10 21:02:47 gson Exp $	*/
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -792,6 +792,24 @@ message set_X11_servers
 message set_X11_prog
 {Programaci�n de X11}
 
+message set_source
+{Source sets}
+
+message set_syssrc
+{Kernel sources}
+
+message set_src
+{Base sources}
+
+message set_sharesrc
+{Share sources}
+
+message set_gnusrc
+{GNU sources}
+
+message set_xsrc
+{X11 sources}
+
 message cur_distsets_row
 {%-27s %3s}
 
@@ -931,7 +949,8 @@ message Custom_installation {Instalaci�n
 message hidden {** oculto **}
 message Host {M�quina}
 message Base_dir {Directorio base}
-message Set_dir {Directorio de conjuntos}
+message Set_dir_src {Directorio de conjuntos binary} /* fix XLAT */
+message Set_dir_bin {Directorio de conjuntos source} /* fix XLAT */
 message Xfer_dir {Directorio a transferir a}
 message User {Usuario}
 message Password {Contrase�a}

Index: src/distrib/utils/sysinst/msg.mi.fr
diff -u src/distrib/utils/sysinst/msg.mi.fr:1.118 src/distrib/utils/sysinst/msg.mi.fr:1.119
--- src/distrib/utils/sysinst/msg.mi.fr:1.118	Mon Jan  9 01:51:47 2012
+++ src/distrib/utils/sysinst/msg.mi.fr	Tue Jan 10 21:02:47 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: msg.mi.fr,v 1.118 2012/01/09 01:51:47 riz Exp $	*/
+/*	$NetBSD: msg.mi.fr,v 1.119 2012/01/10 21:02:47 gson Exp $	*/
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -842,6 +842,24 @@ message set_X11_servers
 message set_X11_prog
 {X11 d�veloppement}
 
+message set_source
+{Source sets}
+
+message set_syssrc
+{Kernel sources}
+
+message set_src
+{Base sources}
+
+message set_sharesrc
+{Share sources}
+
+message set_gnusrc
+{GNU sources}
+
+message set_xsrc
+{X11 sources}
+
 message cur_distsets_row
 {%-33s %3s}
 
@@ -998,7 +1016,8 @@ message Custom_installation {Installatio
 message hidden {** cach� **}
 message Host {Serveur FTP}
 message Base_dir {R�pertoire de base}
-message Set_dir {R�pertoire des composants}
+message Set_dir_bin {R�pertoire des composants binaire}
+message Set_dir_src {R�pertoire des composants source}
 message Xfer_dir {R�pertoire de transfert}
 message User {Utilisateur}
 message Password {Mot de passe}

Index: src/distrib/utils/sysinst/msg.mi.pl
diff -u src/distrib/utils/sysinst/msg.mi.pl:1.77 src/distrib/utils/sysinst/msg.mi.pl:1.78
--- src/distrib/utils/sysinst/msg.mi.pl:1.77	Mon Jan  9 01:51:47 2012
+++ src/distrib/utils/sysinst/msg.mi.pl	Tue Jan 10 21:02:47 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: msg.mi.pl,v 1.77 2012/01/09 01:51:47 riz Exp $	*/
+/*	$NetBSD: msg.mi.pl,v 1.78 2012/01/10 21:02:47 gson Exp $	*/
 /*	Based on english version: */
 /*	NetBSD: msg.mi.pl,v 1.36 2004/04/17 18:55:35 atatat Exp       */
 
@@ -767,6 +767,24 @@ message set_X11_servers
 message set_X11_prog
 {Programowanie X11}
 
+message set_source
+{Source sets}
+
+message set_syssrc
+{Kernel sources}
+
+message set_src
+{Base sources}
+
+message set_sharesrc
+{Share sources}
+
+message set_gnusrc
+{GNU sources}
+
+message set_xsrc
+{X11 sources}
+
 message cur_distsets_row
 {%-30s %3s}
 
@@ -900,7 +918,8 @@ message Custom_installation {Inna instal
 message hidden {** ukryte **}
 message Host {Host}
 message Base_dir {Katalog}
-message Set_dir {Katalog}
+message Set_dir_src {Katalog pakiet binary} /* fix XLAT */
+message Set_dir_bin {Katalog pakiet source} /* fix XLAT */
 message Xfer_dir {Transfer Katalog} /* fix XLAT */
 message User {Uzytkownik}
 message Password {Haslo}

Index: src/distrib/utils/sysinst/net.c
diff -u src/distrib/utils/sysinst/net.c:1.129 src/distrib/utils/sysinst/net.c:1.130
--- src/distrib/utils/sysinst/net.c:1.129	Mon Jan  9 02:52:50 2012
+++ src/distrib/utils/sysinst/net.c	Tue Jan 10 21:02:47 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: net.c,v 1.129 2012/01/09 02:52:50 riz Exp $	*/
+/*	$NetBSD: net.c,v 1.130 2012/01/10 21:02:47 gson Exp $	*/
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -945,7 +945,8 @@ ftp_fetch(const char *set_name)
 	const char *ftp_opt;
 	char ftp_user_encoded[STRSIZE];
 	char ftp_dir_encoded[STRSIZE];
-	char *cp, *set_dir2;
+	char *cp;
+	const char *set_dir2;
 	int rval;
 
 	/*
@@ -981,7 +982,7 @@ ftp_fetch(const char *set_name)
 	if (cp != ftp_dir_encoded && cp[-1] != '/')
 		*cp++ = '/';
 
-	set_dir2 = set_dir;
+	set_dir2 = set_dir_for_set(set_name);
 	while (*set_dir2 == '/')
 		++set_dir2;
 
@@ -1031,7 +1032,9 @@ get_via_ftp(const char *xfer_type)
 	/* We'll fetch each file just before installing it */
 	fetch_fn = ftp_fetch;
 	ftp.xfer_type = xfer_type;
-	snprintf(ext_dir, sizeof ext_dir, "%s/%s", target_prefix(),
+	snprintf(ext_dir_bin, sizeof ext_dir_bin, "%s/%s", target_prefix(),
+	    xfer_dir + (*xfer_dir == '/'));
+	snprintf(ext_dir_src, sizeof ext_dir_src, "%s/%s", target_prefix(),
 	    xfer_dir + (*xfer_dir == '/'));
 
 	return SET_OK;
@@ -1046,9 +1049,10 @@ get_via_nfs(void)
 		return SET_RETRY;
 
 	/* If root is on NFS and we have sets, skip this step. */
-	if (statvfs(set_dir, &sb) == 0 &&
+	if (statvfs(set_dir_bin, &sb) == 0 &&
 	    strcmp(sb.f_fstypename, "nfs") == 0) {
-	    	strlcpy(ext_dir, set_dir, sizeof ext_dir);
+	    	strlcpy(ext_dir_bin, set_dir_bin, sizeof ext_dir_bin);
+	    	strlcpy(ext_dir_src, set_dir_src, sizeof ext_dir_src);
 		return SET_OK;
 	}
 
@@ -1062,7 +1066,8 @@ get_via_nfs(void)
 
 	mnt2_mounted = 1;
 
-	snprintf(ext_dir, sizeof ext_dir, "/mnt2/%s", set_dir);
+	snprintf(ext_dir_bin, sizeof ext_dir_bin, "/mnt2/%s", set_dir_bin);
+	snprintf(ext_dir_src, sizeof ext_dir_src, "/mnt2/%s", set_dir_src);
 
 	/* return location, don't clean... */
 	return SET_OK;

Index: src/distrib/utils/sysinst/util.c
diff -u src/distrib/utils/sysinst/util.c:1.172 src/distrib/utils/sysinst/util.c:1.173
--- src/distrib/utils/sysinst/util.c:1.172	Thu Jan  5 21:29:25 2012
+++ src/distrib/utils/sysinst/util.c	Tue Jan 10 21:02:47 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: util.c,v 1.172 2012/01/05 21:29:25 christos Exp $	*/
+/*	$NetBSD: util.c,v 1.173 2012/01/10 21:02:47 gson Exp $	*/
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -68,7 +68,7 @@
 #define MD_SETS_SELECTED_NOX SET_KERNEL_1, SET_SYSTEM, SET_MD
 #endif
 #ifndef MD_SETS_VALID
-#define MD_SETS_VALID SET_KERNEL, SET_SYSTEM, SET_X11, SET_MD
+#define MD_SETS_VALID SET_KERNEL, SET_SYSTEM, SET_X11, SET_MD, SET_SOURCE
 #endif
 
 #define MAX_CD_DEVS	256	/* how many cd drives do we expect to attach */
@@ -150,6 +150,14 @@ distinfo dist_list[] = {
 	{SET_MD_4_NAME,		SET_MD_4,		MSG_set_md_4, NULL},
 #endif
 
+	{NULL,			SET_GROUP,		MSG_set_source, NULL},
+	{"syssrc",		SET_SYSSRC,		MSG_set_syssrc, NULL},
+	{"src",			SET_SRC,		MSG_set_src, NULL},
+	{"sharesrc",		SET_SHARESRC,		MSG_set_sharesrc, NULL},
+	{"gnusrc",		SET_GNUSRC,		MSG_set_gnusrc, NULL},
+	{"xsrc",		SET_XSRC,		MSG_set_xsrc, NULL},
+	{NULL,			SET_GROUP_END,		NULL, NULL},
+
 	{NULL,			SET_LAST,		NULL, NULL},
 };
 
@@ -357,7 +365,8 @@ get_via_floppy(void)
 	fetch_fn = floppy_fetch;
 
 	/* Set ext_dir for absolute path. */
-	snprintf(ext_dir, sizeof ext_dir, "%s/%s", target_prefix(), xfer_dir);
+	snprintf(ext_dir_bin, sizeof ext_dir_bin, "%s/%s", target_prefix(), xfer_dir);
+	snprintf(ext_dir_src, sizeof ext_dir_src, "%s/%s", target_prefix(), xfer_dir);
 
 	return SET_OK;
 }
@@ -473,8 +482,9 @@ cd_has_sets(void)
 
 	mnt2_mounted = 1;
 
-	snprintf(ext_dir, sizeof ext_dir, "%s/%s", "/mnt2", set_dir);
-	return dir_exists_p(ext_dir);
+	snprintf(ext_dir_bin, sizeof ext_dir_bin, "%s/%s", "/mnt2", set_dir_bin);
+	snprintf(ext_dir_src, sizeof ext_dir_src, "%s/%s", "/mnt2", set_dir_src);
+	return dir_exists_p(ext_dir_bin);
 }
 
 
@@ -520,10 +530,11 @@ get_via_cdrom(void)
 	bool silent = false;
 
 	/* If root is a CD-ROM and we have sets, skip this step. */
-	if (statvfs(set_dir, &sb) == 0 &&
+	if (statvfs(set_dir_bin, &sb) == 0 &&
 	    (strcmp(sb.f_fstypename, MOUNT_CD9660) == 0
 		    || strcmp(sb.f_fstypename, MOUNT_UDF) == 0)) {
-	    	strlcpy(ext_dir, set_dir, sizeof ext_dir);
+	    	strlcpy(ext_dir_bin, set_dir_bin, sizeof ext_dir_bin);
+	    	strlcpy(ext_dir_src, set_dir_src, sizeof ext_dir_src);
 		return SET_OK;
 	}
 
@@ -593,8 +604,10 @@ get_via_localfs(void)
 
 	mnt2_mounted = 1;
 
-	snprintf(ext_dir, sizeof ext_dir, "%s/%s/%s",
-		"/mnt2", localfs_dir, set_dir);
+	snprintf(ext_dir_bin, sizeof ext_dir_bin, "%s/%s/%s",
+		"/mnt2", localfs_dir, set_dir_bin);
+	snprintf(ext_dir_src, sizeof ext_dir_src, "%s/%s/%s",
+		"/mnt2", localfs_dir, set_dir_src);
 
 	return SET_OK;
 }
@@ -614,7 +627,8 @@ get_via_localdir(void)
 	 * We have to have an absolute path ('cos pax runs in a
 	 * different directory), make it so.
 	 */
-	snprintf(ext_dir, sizeof ext_dir, "/%s/%s", localfs_dir, set_dir);
+	snprintf(ext_dir_bin, sizeof ext_dir_bin, "/%s/%s", localfs_dir, set_dir_bin);
+	snprintf(ext_dir_src, sizeof ext_dir_src, "/%s/%s", localfs_dir, set_dir_src);
 
 	return SET_OK;
 }
@@ -856,7 +870,7 @@ extract_file(distinfo *dist, int update)
 		make_target_dir(xfer_dir);
 
 	(void)snprintf(path, sizeof path, "%s/%s%s",
-	    ext_dir, dist->name, dist_postfix);
+	    ext_dir_for_set(dist->name), dist->name, dist_postfix);
 
 	owd = getcwd(NULL, 0);
 
@@ -876,7 +890,7 @@ extract_file(distinfo *dist, int update)
 	 * characters and check again
 	 */
 	(void)snprintf(path, sizeof path, "%s/%.8s%.4s", /* 4 as includes '.' */
-	    ext_dir, dist->name, dist_postfix);
+	    ext_dir_for_set(dist->name), dist->name, dist_postfix);
 		if (!file_exists_p(path)) {
 #endif /* SUPPORT_8_3_SOURCE_FILESYSTEM */
 
@@ -1480,3 +1494,20 @@ check_lfs_progs(void)
 	return 0;
 #endif
 }
+
+int
+set_is_source(const char *set_name) {
+	int len = strlen(set_name);
+	return len >= 3 && memcmp(set_name + len - 3, "src", 3) == 0;
+}
+
+const char *
+set_dir_for_set(const char *set_name) {
+	return set_is_source(set_name) ? set_dir_src : set_dir_bin;
+}
+
+const char *
+ext_dir_for_set(const char *set_name) {
+	return set_is_source(set_name) ? ext_dir_src : ext_dir_bin;
+}
+

Reply via email to