Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 173753 | Differences between
and this patch

Collapse All | Expand All

(-)portage-utils-0.1.25-orig/applets.h (-1 / +1 lines)
Lines 49-55 Link Here
49
	{"q",         q_main,         "<applet> <args>", "virtual applet"},
49
	{"q",         q_main,         "<applet> <args>", "virtual applet"},
50
	{"qatom",     qatom_main,     "<pkg>",           "split atom strings"},
50
	{"qatom",     qatom_main,     "<pkg>",           "split atom strings"},
51
	{"qcache",    qcache_main,    "<action> <args>", "search the metadata cache"},
51
	{"qcache",    qcache_main,    "<action> <args>", "search the metadata cache"},
52
	{"qcheck",    qcheck_main,    "<pkgname>",       "verify mtimes/digests"},
52
	{"qcheck",    qcheck_main,    "<pkgname>",       "verify file existence/mtimes/digests"},
53
	{"qdepends",  qdepends_main,  "<pkgname>",       "show dependency info"},
53
	{"qdepends",  qdepends_main,  "<pkgname>",       "show dependency info"},
54
	{"qfile",     qfile_main,     "<filename>",      "list all pkgs owning files"},
54
	{"qfile",     qfile_main,     "<filename>",      "list all pkgs owning files"},
55
	{"qglsa",     qglsa_main,     "<action> <list>", "check GLSAs against system"},
55
	{"qglsa",     qglsa_main,     "<action> <list>", "check GLSAs against system"},
(-)portage-utils-0.1.25-orig/qcheck.c (-36 / +83 lines)
Lines 9-23 Link Here
9
9
10
#ifdef APPLET_qcheck
10
#ifdef APPLET_qcheck
11
11
12
#define QCHECK_FLAGS "au" COMMON_FLAGS
12
#define QCHECK_FLAGS "auAHT" COMMON_FLAGS
13
static struct option const qcheck_long_opts[] = {
13
static struct option const qcheck_long_opts[] = {
14
	{"all",     no_argument, NULL, 'a'},
14
	{"all",     no_argument, NULL, 'a'},
15
	{"update",  no_argument, NULL, 'u'},
15
	{"update",  no_argument, NULL, 'u'},
16
	{"noafk",   no_argument, NULL, 'A'},
17
	{"nohash",  no_argument, NULL, 'H'},
18
	{"nomtime", no_argument, NULL, 'T'},
16
	COMMON_LONG_OPTS
19
	COMMON_LONG_OPTS
17
};
20
};
18
static const char *qcheck_opts_help[] = {
21
static const char *qcheck_opts_help[] = {
19
	"List all packages",
22
	"List all packages",
20
	"Update chksum and mtimes for packages",
23
	"Update missing files, chksum and mtimes for packages",
24
	"Ignore missing files",
25
	"Ignore differing/unknown file chksums",
26
	"Ignore differing file mtimes",
21
	COMMON_OPTS_HELP
27
	COMMON_OPTS_HELP
22
};
28
};
23
static const char qcheck_rcsid[] = "$Id: qcheck.c,v 1.31 2006/12/25 22:30:22 vapier Exp $";
29
static const char qcheck_rcsid[] = "$Id: qcheck.c,v 1.31 2006/12/25 22:30:22 vapier Exp $";
Lines 31-38 Link Here
31
	struct dirent *dentry, *de;
37
	struct dirent *dentry, *de;
32
	char search_all = 0;
38
	char search_all = 0;
33
	char qc_update = 0;
39
	char qc_update = 0;
40
	char chk_afk = 1;
41
	char chk_hash = 1;
42
	char chk_mtime = 1;
34
	struct stat st;
43
	struct stat st;
35
	size_t num_files, num_files_ok, num_files_unknown;
44
	size_t num_files, num_files_ok, num_files_unknown, num_files_ignored = 0;
36
	char buf[_Q_PATH_MAX], filename[_Q_PATH_MAX];
45
	char buf[_Q_PATH_MAX], filename[_Q_PATH_MAX];
37
	char buffer[_Q_PATH_MAX];
46
	char buffer[_Q_PATH_MAX];
38
47
Lines 44-49 Link Here
44
		COMMON_GETOPTS_CASES(qcheck)
53
		COMMON_GETOPTS_CASES(qcheck)
45
		case 'a': search_all = 1; break;
54
		case 'a': search_all = 1; break;
46
		case 'u': qc_update = 1; break;
55
		case 'u': qc_update = 1; break;
56
		case 'A': chk_afk = 0; break;
57
		case 'H': chk_hash = 0; break;
58
		case 'T': chk_mtime = 0; break;
47
		}
59
		}
48
	}
60
	}
49
	if ((argc == optind) && !search_all)
61
	if ((argc == optind) && !search_all)
Lines 117-123 Link Here
117
				++num_files;
129
				++num_files;
118
				if (lstat(e->name, &st)) {
130
				if (lstat(e->name, &st)) {
119
					/* make sure file exists */
131
					/* make sure file exists */
120
					printf(" %sAFK%s: %s\n", RED, NORM, e->name);
132
					if (chk_afk) {
133
						printf(" %sAFK%s: %s\n", RED, NORM, e->name);
134
					} else {
135
						--num_files;
136
						++num_files_ignored;
137
						if (qc_update)
138
							fputs(buffer, fpx);
139
					}
121
					continue;
140
					continue;
122
				}
141
				}
123
				if (e->digest && S_ISREG(st.st_mode)) {
142
				if (e->digest && S_ISREG(st.st_mode)) {
Lines 130-137 Link Here
130
						default: hash_algo = 0; break;
149
						default: hash_algo = 0; break;
131
					}
150
					}
132
					if (!hash_algo) {
151
					if (!hash_algo) {
133
						printf(" %sUNKNOWN DIGEST%s: '%s' for '%s'\n", RED, NORM, e->digest, e->name);
152
						if (chk_hash) {
134
						++num_files_unknown;
153
							printf(" %sUNKNOWN DIGEST%s: '%s' for '%s'\n", RED, NORM, e->digest, e->name);
154
							++num_files_unknown;
155
						} else {
156
							--num_files;
157
							++num_files_ignored;
158
							if (qc_update)
159
								fputs(buffer, fpx);
160
						}
135
						continue;
161
						continue;
136
					}
162
					}
137
					hashed_file = (char*)hash_file(e->name, hash_algo);
163
					hashed_file = (char*)hash_file(e->name, hash_algo);
Lines 143-194 Link Here
143
						}
169
						}
144
						printf(" %sPERM %4o%s: %s\n", RED, (st.st_mode & 07777), NORM, e->name);
170
						printf(" %sPERM %4o%s: %s\n", RED, (st.st_mode & 07777), NORM, e->name);
145
						++num_files_unknown;
171
						++num_files_unknown;
172
						free(hashed_file);
146
						continue;
173
						continue;
147
					} else if (strcmp(e->digest, hashed_file)) {
174
					} else if (strcmp(e->digest, hashed_file)) {
148
						const char *digest_disp;
175
						if (chk_hash) {
149
						if (qc_update) {
176
							const char *digest_disp;
150
							fprintf(fpx, "obj %s %s %lu\n", e->name, hashed_file, st.st_mtime);
177
							if (qc_update)
151
							if (!verbose)
178
								fprintf(fpx, "obj %s %s %lu\n", e->name, hashed_file, st.st_mtime);
152
								goto free_and_more_hash;
179
							switch (hash_algo) {
180
								case HASH_MD5:  digest_disp = "MD5"; break;
181
								case HASH_SHA1: digest_disp = "SHA1"; break;
182
								default:        digest_disp = "UNK"; break;
183
							}
184
							printf(" %s%s-DIGEST%s: %s", RED, digest_disp, NORM, e->name);
185
							if (verbose)
186
								printf(" (recorded '%s' != actual '%s')", e->digest, hashed_file);
187
							printf("\n");
188
						} else {
189
							--num_files;
190
							++num_files_ignored;
191
							if (qc_update)
192
								fputs(buffer, fpx);
153
						}
193
						}
154
						switch (hash_algo) {
155
							case HASH_MD5:  digest_disp = "MD5"; break;
156
							case HASH_SHA1: digest_disp = "SHA1"; break;
157
							default:        digest_disp = "UNK"; break;
158
						}
159
						printf(" %s%s-DIGEST%s: %s", RED, digest_disp, NORM, e->name);
160
						if (verbose)
161
							printf(" (recorded '%s' != actual '%s')", e->digest, hashed_file);
162
						printf("\n");
163
free_and_more_hash:
164
						free(hashed_file);
194
						free(hashed_file);
165
						continue;
195
						continue;
166
					} else if (e->mtime && e->mtime != st.st_mtime) {
196
					} else if (e->mtime && e->mtime != st.st_mtime) {
197
						if (chk_mtime) {
198
							printf(" %sMTIME%s: %s", RED, NORM, e->name);
199
							if (verbose)
200
								printf(" (recorded '%lu' != actual '%lu')", e->mtime, (unsigned long)st.st_mtime);
201
							printf("\n");
202
203
							/* This can only be an obj, dir and sym have no digest */
204
							if (qc_update)
205
								fprintf(fpx, "obj %s %s %lu\n", e->name, e->digest, st.st_mtime);
206
						} else {
207
							--num_files;
208
							++num_files_ignored;
209
							if (qc_update)
210
								fputs(buffer, fpx);
211
						}
212
						free(hashed_file);
213
						continue;
214
					} else {
215
						if (qc_update)
216
							fputs(buffer, fpx);
217
						free(hashed_file);
218
					}
219
				} else if (e->mtime && e->mtime != st.st_mtime) {
220
					if (chk_mtime) {
167
						printf(" %sMTIME%s: %s", RED, NORM, e->name);
221
						printf(" %sMTIME%s: %s", RED, NORM, e->name);
168
						if (verbose)
222
						if (verbose)
169
							printf(" (recorded '%lu' != actual '%lu')", e->mtime, (unsigned long)st.st_mtime);
223
							printf(" (recorded '%lu' != actual '%lu')", e->mtime, (unsigned long)st.st_mtime);
170
						printf("\n");
224
						printf("\n");
171
225
172
						/* This can only be an obj, dir and sym have no digest */
226
						/* This can only be a sym */
173
						if (qc_update)
227
						if (qc_update)
174
							fprintf(fpx, "obj %s %s %lu\n", e->name, e->digest, st.st_mtime);
228
							fprintf(fpx, "sym %s -> %s %lu\n", e->name, e->sym_target, st.st_mtime);
175
176
						continue;
177
					} else {
229
					} else {
230
						--num_files;
231
						++num_files_ignored;
178
						if (qc_update)
232
						if (qc_update)
179
							fputs(buffer, fpx);
233
							fputs(buffer, fpx);
180
						free(hashed_file);
181
					}
234
					}
182
				} else if (e->mtime && e->mtime != st.st_mtime) {
183
					printf(" %sMTIME%s: %s", RED, NORM, e->name);
184
					if (verbose)
185
						printf(" (recorded '%lu' != actual '%lu')", e->mtime, (unsigned long)st.st_mtime);
186
					printf("\n");
187
188
					/* This can only be a sym */
189
					if (qc_update)
190
						fprintf(fpx, "sym %s -> %s %lu\n", e->name, e->sym_target, st.st_mtime);
191
192
					continue;
235
					continue;
193
				} else {
236
				} else {
194
					if (qc_update)
237
					if (qc_update)
Lines 216-221 Link Here
216
				printf("  %2$s*%1$s Unable to digest %3$s%4$lu%1$s file%5$s\n",
259
				printf("  %2$s*%1$s Unable to digest %3$s%4$lu%1$s file%5$s\n",
217
				       NORM, BOLD, BLUE, (unsigned long)num_files_unknown,
260
				       NORM, BOLD, BLUE, (unsigned long)num_files_unknown,
218
				       (num_files_unknown > 1 ? "s" : ""));
261
				       (num_files_unknown > 1 ? "s" : ""));
262
			if (num_files_ignored)
263
				printf("  %2$s*%1$s %3$s%4$lu%1$s file%5$s ignored\n",
264
				       NORM, BOLD, BLUE, (unsigned long)num_files_ignored,
265
				       (num_files_ignored > 1 ? "s were" : " was"));
219
		}
266
		}
220
		closedir(dirp);
267
		closedir(dirp);
221
		chdir("..");
268
		chdir("..");

Return to bug 173753