]> cygwin.com Git - cygwin-apps/setup.git/blob - package_source.h
Properly record SHA512 checksum presence and skip validation for ad-hoc installs
[cygwin-apps/setup.git] / package_source.h
1 /*
2 * Copyright (c) 2001, Robert Collins.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * A copy of the GNU General Public License can be found at
10 * http://www.gnu.org/
11 *
12 * Written by Robert Collins <rbtcollins@hotmail.com>
13 *
14 */
15
16 #ifndef SETUP_PACKAGE_SOURCE_H
17 #define SETUP_PACKAGE_SOURCE_H
18
19 /* this is the parent class for all package source (not source code - installation
20 * source as in http/ftp/disk file) operations.
21 */
22
23 /* required to parse this file */
24 #include "sha2.h"
25 #include "strings.h"
26 #include "String++.h"
27 #include "csu_util/MD5Sum.h"
28 #include <vector>
29
30 /* standard binary package metadata:
31 * Name (ie mutt
32 * Vendor Version (ie 2.5.1)
33 * Package Version (ie 16)
34 * Stability
35 * Files
36 */
37
38 /* For non installed files, this class can be populated via information about
39 * what is available on the net, or by parsing a specific package file.
40 * for installed packages, this class should represent what is currently installed,
41 * - updated by what net metadata has about it.
42 * i.e. the stability of this version will change simply because the net mirrors
43 * now consider it old.
44 */
45
46 class site
47 {
48 public:
49 site (const std::string& newkey);
50 ~site () {}
51 std::string key;
52 bool operator == (site const &rhs)
53 {
54 return casecompare(key, rhs.key) == 0;
55 }
56 };
57
58 class packagesource
59 {
60 public:
61 packagesource ():size (0), canonical (0), base (0), filename (0), cached (),
62 _installedSize (0)
63 {
64 memset (sha512sum, 0, sizeof sha512sum);
65 sha512_isSet = false;
66 };
67 /* how big is the source file */
68 size_t size;
69 /* how much space do we need to install this ? */
70 virtual unsigned long installedSize () const
71 {
72 return _installedSize;
73 }
74 virtual void setInstalledSize (unsigned long size)
75 {
76 _installedSize = size;
77 }
78 /* The canonical name - the complete path to the source file
79 * i.e. foo/bar/package-1.tar.bz2
80 */
81 virtual const char *Canonical () const
82 {
83 return canonical;
84 };
85 /* The basename - without extention
86 * i.e. package-1
87 */
88 virtual const char *Base () const
89 {
90 return base;
91 };
92 /* The basename - with extention
93 * i.e. package-1.tar.bz2
94 */
95 virtual const char *Filename () const
96 {
97 return filename;
98 };
99 /* what is the cached filename, to prevent directory scanning during install */
100 virtual char const *Cached () const
101 {
102 /* Pointer-coerce-to-boolean is used by many callers. */
103 if (cached.empty())
104 return NULL;
105 return cached.c_str();
106 };
107 /* sets the canonical path, and parses and creates base and filename */
108 virtual void set_canonical (char const *);
109 virtual void set_cached (const std::string& );
110 unsigned char sha512sum[SHA512_DIGEST_LENGTH];
111 bool sha512_isSet;
112 MD5Sum md5;
113 typedef std::vector <site> sitestype;
114 sitestype sites;
115
116 virtual ~ packagesource ()
117 {
118 if (canonical)
119 delete []canonical;
120 if (base)
121 delete []base;
122 if (filename)
123 delete []filename;
124 };
125
126 private:
127 char *canonical;
128 char *base;
129 char *filename;
130 std::string cached;
131 unsigned long _installedSize;
132 };
133
134 #endif /* SETUP_PACKAGE_SOURCE_H */
This page took 0.042701 seconds and 6 git commands to generate.