bin/145100: [patch] pkg_add(1) - remove hardcoded versioning
data from add/main.c
Garrett Cooper
gcooper at FreeBSD.org
Sun Mar 28 09:13:59 UTC 2010
On Sun, Mar 28, 2010 at 1:50 AM, <FreeBSD-gnats-submit at freebsd.org> wrote:
> Thank you very much for your problem report.
> It has the internal identification `bin/145100'.
> The individual assigned to look at your
> report is: freebsd-bugs.
>
> You can access the state of your problem report at any time
> via this link:
>
> http://www.freebsd.org/cgi/query-pr.cgi?pr=145100
>
>>Category: bin
>>Responsible: freebsd-bugs
>>Synopsis: [patch] pkg_add(1) - remove hardcoded versioning data from add/main.c
>>Arrival-Date: Sun Mar 28 08:50:02 UTC 2010
Supported hierarchies are done like:
/<machine>/packages-<release-lowercase>
Corrected with this diff.
Thanks,
-Garrett
-------------- next part --------------
==== //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/add/main.c#3 - /scratch/freebsd/perforce/pkg_install-enhancements/usr.sbin/pkg_install/add/main.c ====
@@ -52,51 +52,6 @@
char *progname = NULL;
-struct {
- int lowver; /* Lowest version number to match */
- int hiver; /* Highest version number to match */
- const char *directory; /* Directory it lives in */
-} releases[] = {
- { 410000, 410000, "/packages-4.1-release" },
- { 420000, 420000, "/packages-4.2-release" },
- { 430000, 430000, "/packages-4.3-release" },
- { 440000, 440000, "/packages-4.4-release" },
- { 450000, 450000, "/packages-4.5-release" },
- { 460000, 460001, "/packages-4.6-release" },
- { 460002, 460099, "/packages-4.6.2-release" },
- { 470000, 470099, "/packages-4.7-release" },
- { 480000, 480099, "/packages-4.8-release" },
- { 490000, 490099, "/packages-4.9-release" },
- { 491000, 491099, "/packages-4.10-release" },
- { 492000, 492099, "/packages-4.11-release" },
- { 500000, 500099, "/packages-5.0-release" },
- { 501000, 501099, "/packages-5.1-release" },
- { 502000, 502009, "/packages-5.2-release" },
- { 502010, 502099, "/packages-5.2.1-release" },
- { 503000, 503099, "/packages-5.3-release" },
- { 504000, 504099, "/packages-5.4-release" },
- { 505000, 505099, "/packages-5.5-release" },
- { 600000, 600099, "/packages-6.0-release" },
- { 601000, 601099, "/packages-6.1-release" },
- { 602000, 602099, "/packages-6.2-release" },
- { 603000, 603099, "/packages-6.3-release" },
- { 604000, 604099, "/packages-6.4-release" },
- { 700000, 700099, "/packages-7.0-release" },
- { 701000, 701099, "/packages-7.1-release" },
- { 702000, 702099, "/packages-7.2-release" },
- { 800000, 800499, "/packages-8.0-release" },
- { 300000, 399000, "/packages-3-stable" },
- { 400000, 499000, "/packages-4-stable" },
- { 502100, 502128, "/packages-5-current" },
- { 503100, 599000, "/packages-5-stable" },
- { 600100, 699000, "/packages-6-stable" },
- { 700100, 799000, "/packages-7-stable" },
- { 800500, 899000, "/packages-8-stable" },
- { 900000, 999000, "/packages-9-current" },
- { 0, 9999999, "/packages-current" },
- { 0, 0, NULL }
-};
-
static char *getpackagesite(void);
int getosreldate(void);
@@ -302,8 +257,8 @@
static char *
getpackagesite(void)
{
- int reldate, i;
static char sitepath[MAXPATHLEN];
+ size_t i;
struct utsname u;
if (getenv("PACKAGESITE")) {
@@ -327,20 +282,22 @@
>= sizeof(sitepath))
return NULL;
- uname(&u);
- if (strlcat(sitepath, u.machine, sizeof(sitepath)) >= sizeof(sitepath))
+ if (uname(&u) == -1) {
+ warn("%s.%s: could not determine uname information", progname,
+ __func__);
+ return NULL;
+ }
+ if (strlcat(sitepath, u.machine, sizeof(sitepath)) >= sizeof(sitepath) ||
+ strlcat(sitepath, "/packages-", sizeof(sitepath)) >= sizeof(sitepath))
return NULL;
- reldate = getosreldate();
- for(i = 0; releases[i].directory != NULL; i++) {
- if (reldate >= releases[i].lowver && reldate <= releases[i].hiver) {
- if (strlcat(sitepath, releases[i].directory, sizeof(sitepath))
- >= sizeof(sitepath))
- return NULL;
- break;
- }
+ for (i = 0; u.release[i] != '\0'; i++) {
+ u.release[i] = tolower(u.release[i]);
}
+ if (strlcat(sitepath, u.release, sizeof(sitepath)) >= sizeof(sitepath))
+ return NULL;
+
if (strlcat(sitepath, "/Latest/", sizeof(sitepath)) >= sizeof(sitepath))
return NULL;
More information about the freebsd-bugs
mailing list