Commit | Line | Data |
---|---|---|
ded59665 TD |
1 | Patch for version 3.01, taken from upstream at |
2 | https://sourceforge.net/projects/cdrtools/files/cdrtools-3.01-fix-20151126-mkisofs-isoinfo.patch | |
3 | ||
4 | --- cdrtools-3.01.orig/mkisofs/diag/isoinfo.c 2015-07-22 20:36:45.000000000 +0000 | |
5 | +++ cdrtools-3.01/mkisofs/diag/isoinfo.c 2015-11-17 19:35:40.000000000 +0000 | |
6 | @@ -1,8 +1,8 @@ | |
7 | -/* @(#)isoinfo.c 1.95 15/07/22 joerg */ | |
8 | +/* @(#)isoinfo.c 1.100 15/11/17 joerg */ | |
9 | #include <schily/mconfig.h> | |
10 | #ifndef lint | |
11 | static UConst char sccsid[] = | |
12 | - "@(#)isoinfo.c 1.95 15/07/22 joerg"; | |
13 | + "@(#)isoinfo.c 1.100 15/11/17 joerg"; | |
14 | #endif | |
15 | /* | |
16 | * File isodump.c - dump iso9660 directory information. | |
17 | @@ -148,8 +148,10 @@ LOCAL char er_id[256]; | |
18 | LOCAL int su_version = 0; | |
19 | LOCAL int rr_version = 0; | |
20 | LOCAL int aa_version = 0; | |
21 | +LOCAL int cl_extent = 0; | |
22 | LOCAL int ucs_level = 0; | |
23 | LOCAL BOOL iso9660_inodes = FALSE; | |
24 | +LOCAL uid_t myuid; | |
25 | ||
26 | #ifdef USE_FIND | |
27 | LOCAL findn_t *find_node; /* syntaxtree from find_parse() */ | |
28 | @@ -208,6 +210,9 @@ LOCAL void extract __PR((char *rootname | |
29 | LOCAL void extract_file __PR((int f, | |
30 | struct iso_directory_record * idr, | |
31 | char *fname)); | |
32 | +LOCAL void parse_cl_dir __PR((struct iso_directory_record *idr, | |
33 | + int extent)); | |
34 | +LOCAL BOOL parse_de __PR((struct iso_directory_record *idr)); | |
35 | LOCAL void parse_dir __PR((char * rootname, int extent, int len)); | |
36 | LOCAL void usage __PR((int excode)); | |
37 | EXPORT int main __PR((int argc, char *argv[])); | |
38 | @@ -459,7 +464,6 @@ parse_rr(pnt, len, cont_flag) | |
39 | int slen; | |
40 | int xlen; | |
41 | int ncount; | |
42 | - int cl_extent; | |
43 | int pl_extent; | |
44 | int cont_extent, cont_offset, cont_size; | |
45 | int flag1, flag2; | |
46 | @@ -469,7 +473,7 @@ parse_rr(pnt, len, cont_flag) | |
47 | ||
48 | symlinkname[0] = 0; | |
49 | ||
50 | - cont_extent = cont_offset = cont_size = 0; | |
51 | + cl_extent = cont_extent = cont_offset = cont_size = 0; | |
52 | ||
53 | ncount = 0; | |
54 | flag1 = -1; | |
55 | @@ -714,6 +718,7 @@ struct todo | |
56 | }; | |
57 | ||
58 | LOCAL struct todo *todo_idr = NULL; | |
59 | +LOCAL struct todo **todo_pp = &todo_idr; | |
60 | ||
61 | LOCAL char *months[12] = {"Jan", "Feb", "Mar", "Apr", | |
62 | "May", "Jun", "Jul", | |
63 | @@ -962,8 +967,14 @@ static BOOL isfirst = TRUE; | |
64 | close(f); | |
65 | return; | |
66 | setmode: | |
67 | - fchmodat(AT_FDCWD, fname, fstat_buf.st_mode, AT_SYMLINK_NOFOLLOW); | |
68 | fchownat(AT_FDCWD, fname, fstat_buf.st_uid, fstat_buf.st_gid, AT_SYMLINK_NOFOLLOW); | |
69 | + if (myuid != 0 && S_ISDIR(fstat_buf.st_mode)) { | |
70 | + /* | |
71 | + * Temporary hack until we have a dirstack like star. | |
72 | + */ | |
73 | + fstat_buf.st_mode |= S_IWUSR; | |
74 | + } | |
75 | + fchmodat(AT_FDCWD, fname, fstat_buf.st_mode, AT_SYMLINK_NOFOLLOW); | |
76 | times[0].tv_sec = fstat_buf.st_atime; | |
77 | times[0].tv_nsec = stat_ansecs(&fstat_buf); | |
78 | times[1].tv_sec = fstat_buf.st_mtime; | |
79 | @@ -1001,6 +1012,143 @@ extract_file(f, idr, fname) | |
80 | } | |
81 | } | |
82 | ||
83 | + | |
84 | +LOCAL void | |
85 | +parse_cl_dir(idr, extent) | |
86 | + struct iso_directory_record *idr; | |
87 | + int extent; | |
88 | +{ | |
89 | + char cl_name_buf[256*3]; | |
90 | + | |
91 | + strlcpy(cl_name_buf, name_buf, sizeof (cl_name_buf)); | |
92 | +#ifdef USE_SCG | |
93 | + readsecs(extent - sector_offset, idr, 1); | |
94 | +#else | |
95 | + lseek(fileno(infile), ((off_t)(extent - sector_offset)) << 11, SEEK_SET); | |
96 | + read(fileno(infile), idr, 2048); | |
97 | +#endif | |
98 | + | |
99 | + if (parse_de(idr) && use_rock) | |
100 | + dump_rr(idr); | |
101 | + strlcpy(name_buf, cl_name_buf, sizeof (name_buf)); | |
102 | +} | |
103 | + | |
104 | +LOCAL BOOL | |
105 | +parse_de(idr) | |
106 | + struct iso_directory_record *idr; | |
107 | +{ | |
108 | + unsigned char uc; | |
109 | + | |
110 | + if (idr->length[0] == 0) | |
111 | + return (FALSE); | |
112 | + memset(&fstat_buf, 0, sizeof (fstat_buf)); | |
113 | + found_rr = 0; | |
114 | + name_buf[0] = xname[0] = 0; | |
115 | + fstat_buf.st_size = (off_t)(unsigned)isonum_733((unsigned char *)idr->size); | |
116 | + if (idr->flags[0] & 2) | |
117 | + fstat_buf.st_mode |= S_IFDIR; | |
118 | + else | |
119 | + fstat_buf.st_mode |= S_IFREG; | |
120 | + if (idr->name_len[0] == 1 && idr->name[0] == 0) | |
121 | + strcpy(name_buf, "."); | |
122 | + else if (idr->name_len[0] == 1 && idr->name[0] == 1) | |
123 | + strcpy(name_buf, ".."); | |
124 | + else { | |
125 | + switch (ucs_level) { | |
126 | + case 3: | |
127 | + case 2: | |
128 | + case 1: | |
129 | + /* | |
130 | + * Unicode name. Convert as best we can. | |
131 | + */ | |
132 | + { | |
133 | + int j; | |
134 | + name_buf[0] = '\0'; | |
135 | +#ifdef USE_ICONV | |
136 | + if (use_iconv(unls)) { | |
137 | + int u; | |
138 | + char *to = name_buf; | |
139 | + | |
140 | + for (j = 0, u = 0; j < (int)idr->name_len[0] / 2; j++) { | |
141 | + char *ibuf = (char *)&idr->name[j*2]; | |
142 | + size_t isize = 2; /* UCS-2 character size */ | |
143 | + size_t osize = 4; | |
144 | + | |
145 | + if (iconv(unls->sic_uni2cd, (__IC_CONST char **)&ibuf, &isize, | |
146 | + (char **)&to, &osize) == -1) { | |
147 | + int err = geterrno(); | |
148 | + | |
149 | + if ((err == EINVAL || err == EILSEQ) && | |
150 | + osize == 4) { | |
151 | + *to = '_'; | |
152 | + u += 1; | |
153 | + to++; | |
154 | + } | |
155 | + } else { | |
156 | + u += 4 - osize; | |
157 | + to = &name_buf[u]; | |
158 | + } | |
159 | + } | |
160 | + j = u; | |
161 | + } else | |
162 | +#endif | |
163 | + for (j = 0; j < (int)idr->name_len[0] / 2; j++) { | |
164 | + UInt16_t unichar; | |
165 | + | |
166 | + unichar = (idr->name[j*2] & 0xFF) * 256 + | |
167 | + (idr->name[j*2+1] & 0xFF); | |
168 | + | |
169 | + /* | |
170 | + * Get the backconverted char | |
171 | + */ | |
172 | + if (unls) | |
173 | + uc = sic_uni2c(unls, unichar); | |
174 | + else | |
175 | + uc = unichar > 255 ? '_' : unichar; | |
176 | + | |
177 | + name_buf[j] = uc ? uc : '_'; | |
178 | + } | |
179 | + name_buf[j] = '\0'; | |
180 | + } | |
181 | + break; | |
182 | + case 0: | |
183 | + /* | |
184 | + * Normal non-Unicode name. | |
185 | + */ | |
186 | + strncpy(name_buf, idr->name, idr->name_len[0]); | |
187 | + name_buf[idr->name_len[0]] = 0; | |
188 | + break; | |
189 | + default: | |
190 | + /* | |
191 | + * Don't know how to do these yet. Maybe they are the same | |
192 | + * as one of the above. | |
193 | + */ | |
194 | + exit(1); | |
195 | + } | |
196 | + } | |
197 | + memcpy(date_buf, idr->date, 9); | |
198 | + /* | |
199 | + * Always first set up time stamps and file modes from | |
200 | + * ISO-9660. This is used as a fallback in case that | |
201 | + * there is no related Rock Ridge based data. | |
202 | + */ | |
203 | + fstat_buf.st_atime = | |
204 | + fstat_buf.st_mtime = | |
205 | + fstat_buf.st_ctime = iso9660_time(date_buf, NULL, FALSE); | |
206 | + fstat_buf.st_mode |= S_IRUSR|S_IXUSR | | |
207 | + S_IRGRP|S_IXGRP | | |
208 | + S_IROTH|S_IXOTH; | |
209 | + fstat_buf.st_nlink = 1; | |
210 | + fstat_buf.st_ino = 0; | |
211 | + fstat_buf.st_uid = 0; | |
212 | + fstat_buf.st_gid = 0; | |
213 | + if (iso9660_inodes) { | |
214 | + fstat_buf.st_ino = (unsigned long) | |
215 | + isonum_733((unsigned char *)idr->extent); | |
216 | + } | |
217 | + return (TRUE); | |
218 | +} | |
219 | + | |
220 | LOCAL void | |
221 | parse_dir(rootname, extent, len) | |
222 | char *rootname; | |
223 | @@ -1012,12 +1160,13 @@ parse_dir(rootname, extent, len) | |
224 | struct iso_directory_record * idr; | |
225 | struct iso_directory_record didr; | |
226 | struct stat dstat; | |
227 | - unsigned char uc; | |
228 | + unsigned char cl_buffer[2048]; | |
229 | unsigned char flags = 0; | |
230 | Llong size = 0; | |
231 | int sextent = 0; | |
232 | int rlen; | |
233 | int blen; | |
234 | + int rr_flags = 0; | |
235 | static char *n = 0; | |
236 | static int nlen = 0; | |
237 | ||
238 | @@ -1039,115 +1188,23 @@ static int nlen = 0; | |
239 | i = 0; | |
240 | while (1 == 1) { | |
241 | idr = (struct iso_directory_record *) &buffer[i]; | |
242 | - if (idr->length[0] == 0) break; | |
243 | - memset(&fstat_buf, 0, sizeof (fstat_buf)); | |
244 | - found_rr = 0; | |
245 | - name_buf[0] = xname[0] = 0; | |
246 | - fstat_buf.st_size = (off_t)(unsigned)isonum_733((unsigned char *)idr->size); | |
247 | - if (idr->flags[0] & 2) | |
248 | - fstat_buf.st_mode |= S_IFDIR; | |
249 | - else | |
250 | - fstat_buf.st_mode |= S_IFREG; | |
251 | - if (idr->name_len[0] == 1 && idr->name[0] == 0) | |
252 | - strcpy(name_buf, "."); | |
253 | - else if (idr->name_len[0] == 1 && idr->name[0] == 1) | |
254 | - strcpy(name_buf, ".."); | |
255 | - else { | |
256 | - switch (ucs_level) { | |
257 | - case 3: | |
258 | - case 2: | |
259 | - case 1: | |
260 | - /* | |
261 | - * Unicode name. Convert as best we can. | |
262 | - */ | |
263 | - { | |
264 | - int j; | |
265 | - | |
266 | - name_buf[0] = '\0'; | |
267 | -#ifdef USE_ICONV | |
268 | - if (use_iconv(unls)) { | |
269 | - int u; | |
270 | - char *to = name_buf; | |
271 | - | |
272 | - for (j = 0, u = 0; j < (int)idr->name_len[0] / 2; j++) { | |
273 | - char *ibuf = (char *)&idr->name[j*2]; | |
274 | - size_t isize = 2; /* UCS-2 character size */ | |
275 | - size_t osize = 4; | |
276 | - | |
277 | - if (iconv(unls->sic_uni2cd, (__IC_CONST char **)&ibuf, &isize, | |
278 | - (char **)&to, &osize) == -1) { | |
279 | - int err = geterrno(); | |
280 | - | |
281 | - if ((err == EINVAL || err == EILSEQ) && | |
282 | - osize == 4) { | |
283 | - *to = '_'; | |
284 | - u += 1; | |
285 | - to++; | |
286 | - } | |
287 | - } else { | |
288 | - u += 4 - osize; | |
289 | - to = &name_buf[u]; | |
290 | - } | |
291 | - } | |
292 | - j = u; | |
293 | - } else | |
294 | -#endif | |
295 | - for (j = 0; j < (int)idr->name_len[0] / 2; j++) { | |
296 | - UInt16_t unichar; | |
297 | - | |
298 | - unichar = (idr->name[j*2] & 0xFF) * 256 + | |
299 | - (idr->name[j*2+1] & 0xFF); | |
300 | - | |
301 | - /* | |
302 | - * Get the backconverted char | |
303 | - */ | |
304 | - if (unls) | |
305 | - uc = sic_uni2c(unls, unichar); | |
306 | - else | |
307 | - uc = unichar > 255 ? '_' : unichar; | |
308 | + if (idr->length[0] == 0) | |
309 | + break; | |
310 | + parse_de(idr); | |
311 | + if (use_rock) { | |
312 | + rr_flags = dump_rr(idr); | |
313 | ||
314 | - name_buf[j] = uc ? uc : '_'; | |
315 | - } | |
316 | - name_buf[j] = '\0'; | |
317 | - } | |
318 | - break; | |
319 | - case 0: | |
320 | + if (rr_flags & RR_FLAG_CL) { | |
321 | /* | |
322 | - * Normal non-Unicode name. | |
323 | + * Need to reparse the child link | |
324 | + * but note that we parse "CL/." | |
325 | + * so we get no usable file name. | |
326 | */ | |
327 | - strncpy(name_buf, idr->name, idr->name_len[0]); | |
328 | - name_buf[idr->name_len[0]] = 0; | |
329 | - break; | |
330 | - default: | |
331 | - /* | |
332 | - * Don't know how to do these yet. Maybe they are the same | |
333 | - * as one of the above. | |
334 | - */ | |
335 | - exit(1); | |
336 | - } | |
337 | + idr = (struct iso_directory_record *) cl_buffer; | |
338 | + parse_cl_dir(idr, cl_extent); | |
339 | + } else if (rr_flags & RR_FLAG_RE) | |
340 | + goto cont; /* skip rr_moved */ | |
341 | } | |
342 | - memcpy(date_buf, idr->date, 9); | |
343 | - /* | |
344 | - * Always first set up time stamps and file modes from | |
345 | - * ISO-9660. This is used as a fallback in case that | |
346 | - * there is no related Rock Ridge based data. | |
347 | - */ | |
348 | - fstat_buf.st_atime = | |
349 | - fstat_buf.st_mtime = | |
350 | - fstat_buf.st_ctime = iso9660_time(date_buf, NULL, FALSE); | |
351 | - fstat_buf.st_mode |= S_IRUSR|S_IXUSR | | |
352 | - S_IRGRP|S_IXGRP | | |
353 | - S_IROTH|S_IXOTH; | |
354 | - fstat_buf.st_nlink = 1; | |
355 | - fstat_buf.st_ino = 0; | |
356 | - fstat_buf.st_uid = 0; | |
357 | - fstat_buf.st_gid = 0; | |
358 | - if (iso9660_inodes) { | |
359 | - fstat_buf.st_ino = (unsigned long) | |
360 | - isonum_733((unsigned char *)idr->extent); | |
361 | - } | |
362 | - if (use_rock) | |
363 | - dump_rr(idr); | |
364 | if (Xtract && | |
365 | (idr->flags[0] & 2) != 0 && | |
366 | idr->name_len[0] == 1 && | |
367 | @@ -1170,30 +1227,30 @@ static int nlen = 0; | |
368 | n[rlen] = '\0'; | |
369 | ||
370 | if ((idr->flags[0] & 2) != 0 && | |
371 | - (idr->name_len[0] != 1 || | |
372 | + ((rr_flags & RR_FLAG_CL) || | |
373 | + idr->name_len[0] != 1 || | |
374 | (idr->name[0] != 0 && idr->name[0] != 1))) { | |
375 | /* | |
376 | * This is a plain directory (neither "xxx/." | |
377 | * nor "xxx/.."). | |
378 | * Add this directory to the todo list. | |
379 | */ | |
380 | - td = todo_idr; | |
381 | - if (td != NULL) { | |
382 | - while (td->next != NULL) | |
383 | - td = td->next; | |
384 | - td->next = (struct todo *) malloc(sizeof (*td)); | |
385 | - td = td->next; | |
386 | - } else { | |
387 | - todo_idr = td = (struct todo *) malloc(sizeof (*td)); | |
388 | - } | |
389 | + td = (struct todo *) malloc(sizeof (*td)); | |
390 | + if (td == NULL) | |
391 | + comerr(_("No memory.\n")); | |
392 | td->next = NULL; | |
393 | td->extent = isonum_733((unsigned char *)idr->extent); | |
394 | td->length = isonum_733((unsigned char *)idr->size); | |
395 | td->name = (char *) malloc(strlen(rootname) | |
396 | + strlen(name_buf) + 2); | |
397 | + if (td->name == NULL) | |
398 | + comerr(_("No memory.\n")); | |
399 | strcpy(td->name, rootname); | |
400 | strcat(td->name, name_buf); | |
401 | strcat(td->name, "/"); | |
402 | + | |
403 | + *todo_pp = td; | |
404 | + todo_pp = &td->next; | |
405 | } else { | |
406 | if (xtract && strcmp(xtract, n) == 0) { | |
407 | extract_file(STDOUT_FILENO, idr, "stdout"); | |
408 | @@ -1253,6 +1310,7 @@ static int nlen = 0; | |
409 | if ((idr->flags[0] & ISO_MULTIEXTENT) == 0) | |
410 | size = 0; | |
411 | } | |
412 | + cont: | |
413 | i += buffer[i]; | |
414 | if (i > 2048 - offsetof(struct iso_directory_record, name[0])) break; | |
415 | } | |
416 | @@ -1381,12 +1439,13 @@ main(argc, argv) | |
417 | usage(0); | |
418 | if (prvers) { | |
419 | printf(_("isoinfo %s (%s-%s-%s) Copyright (C) 1993-1999 %s (C) 1999-2015 %s\n"), | |
420 | - VERSION, | |
421 | + "3.02a02", | |
422 | HOST_CPU, HOST_VENDOR, HOST_OS, | |
423 | _("Eric Youngdale"), | |
424 | _("Joerg Schilling")); | |
425 | exit(0); | |
426 | } | |
427 | + myuid = getuid(); | |
428 | #ifdef USE_FIND | |
429 | if (do_find) { | |
430 | finda_t fa; | |
431 | --- cdrtools-3.01.orig/mkisofs/udf.c 2013-04-24 20:45:18.000000000 +0000 | |
432 | +++ cdrtools-3.01/mkisofs/udf.c 2015-11-25 22:07:30.000000000 +0000 | |
433 | @@ -1,15 +1,15 @@ | |
434 | -/* @(#)udf.c 1.42 13/04/24 Copyright 2001-2013 J. Schilling */ | |
435 | +/* @(#)udf.c 1.43 15/11/25 Copyright 2001-2015 J. Schilling */ | |
436 | #include <schily/mconfig.h> | |
437 | #ifndef lint | |
438 | static UConst char sccsid[] = | |
439 | - "@(#)udf.c 1.42 13/04/24 Copyright 2001-2013 J. Schilling"; | |
440 | + "@(#)udf.c 1.43 15/11/25 Copyright 2001-2015 J. Schilling"; | |
441 | #endif | |
442 | /* | |
443 | * udf.c - UDF support for mkisofs | |
444 | * | |
445 | * Written by Ben Rudiak-Gould (2001). | |
446 | * | |
447 | - * Copyright 2001-2013 J. Schilling. | |
448 | + * Copyright 2001-2015 J. Schilling. | |
449 | */ | |
450 | /* | |
451 | * This program is free software; you can redistribute it and/or modify | |
452 | @@ -98,7 +98,7 @@ static UConst char sccsid[] = | |
453 | extern int use_sparcboot; | |
454 | ||
455 | extern struct directory *root; | |
456 | -extern time_t begun; | |
457 | +extern struct timeval tv_begun; | |
458 | ||
459 | static unsigned lba_main_seq; | |
460 | static unsigned lba_main_seq_copy; | |
461 | @@ -110,7 +110,7 @@ static unsigned lba_end_anchor_vol_desc; | |
462 | static unsigned num_udf_files; | |
463 | static unsigned num_udf_directories; | |
464 | ||
465 | -static unsigned volume_set_id[2]; | |
466 | +static unsigned volume_set_id[2] = { 0, 0 }; | |
467 | ||
468 | #define UDF_MAIN_SEQ_LENGTH (16) | |
469 | #define UDF_INTEG_SEQ_LENGTH (2) | |
470 | @@ -723,7 +723,7 @@ set_primary_vol_desc(buf, lba) | |
471 | /*pvd->volume_abstract;*/ | |
472 | /*pvd->volume_copyright_notice;*/ | |
473 | /*pvd->application_ident;*/ | |
474 | - set_timestamp_from_time_t(&pvd->recording_date_and_time, begun); | |
475 | + set_timestamp_from_time_t(&pvd->recording_date_and_time, tv_begun.tv_sec); | |
476 | set_impl_ident(&pvd->impl_ident); | |
477 | set_tag(&pvd->desc_tag, UDF_TAGID_PRIMARY_VOLUME_DESC, lba, 512); | |
478 | } | |
479 | @@ -831,7 +831,7 @@ set_logical_vol_integrity_desc(buf, lba) | |
480 | udf_logical_volume_integrity_desc *lvid = | |
481 | (udf_logical_volume_integrity_desc *)buf; | |
482 | ||
483 | - set_timestamp_from_time_t(&lvid->recording_date, begun); | |
484 | + set_timestamp_from_time_t(&lvid->recording_date, tv_begun.tv_sec); | |
485 | set32(&lvid->integrity_type, UDF_INTEGRITY_TYPE_CLOSE); | |
486 | /*lvid->next_integrity_extent;*/ | |
487 | set64(&lvid->logical_volume_contents_use.unique_id, | |
488 | @@ -859,7 +859,7 @@ set_file_set_desc(buf, rba) | |
489 | { | |
490 | udf_file_set_desc *fsd = (udf_file_set_desc *)buf; | |
491 | ||
492 | - set_timestamp_from_time_t(&fsd->recording_date_and_time, begun); | |
493 | + set_timestamp_from_time_t(&fsd->recording_date_and_time, tv_begun.tv_sec); | |
494 | set16(&fsd->interchange_level, 3); | |
495 | set16(&fsd->maximum_interchange_level, 3); | |
496 | set32(&fsd->character_set_list, 1); | |
497 | @@ -1986,8 +1986,10 @@ udf_main_seq_write(out) | |
498 | * volume_set_id needs to be set to a (64-bit) "unique" number. | |
499 | * This will have to do for now. | |
500 | */ | |
501 | - volume_set_id[0] = begun; | |
502 | - volume_set_id[1] = (unsigned)clock(); /* XXX Maybe non-portable */ | |
503 | + if (volume_set_id[0] == 0) { | |
504 | + volume_set_id[0] = tv_begun.tv_sec; | |
505 | + volume_set_id[1] = (unsigned)tv_begun.tv_usec; | |
506 | + } | |
507 | ||
508 | memset(buf, 0, sizeof (buf)); | |
509 | set_primary_vol_desc(buf, last_extent_written++); | |
510 | --- cdrtools-3.01.orig/mkisofs/mkisofs.c 2015-01-01 14:19:51.000000000 +0000 | |
511 | +++ cdrtools-3.01/mkisofs/mkisofs.c | |
512 | @@ -69 +69 @@ int path_ind; | |
513 | -char version_string[] = VERSION; | |
514 | +char version_string[] = "3.01-fix-20151126"; |