[Debburn-changes] r704 - in cdrkit/trunk: . wodim
Eduard Bloch
blade at alioth.debian.org
Fri Feb 9 23:15:37 CET 2007
Author: blade
Date: 2007-02-09 23:15:36 +0100 (Fri, 09 Feb 2007)
New Revision: 704
Modified:
cdrkit/trunk/Changelog
cdrkit/trunk/wodim/wodim.c
Log:
Restored the working procfs feature fishing code
Modified: cdrkit/trunk/Changelog
===================================================================
--- cdrkit/trunk/Changelog 2007-02-09 22:08:08 UTC (rev 703)
+++ cdrkit/trunk/Changelog 2007-02-09 22:15:36 UTC (rev 704)
@@ -13,8 +13,7 @@
Vladimir Nadvornik <nadvornik at suse.cz>
[ Peter Samuelson ]
- * Clean up Linux-2.6 CD/DVD-R drive detection, for simpler code and
- slightly clearer error messages.
+ * Clean up Linux-2.6 CD/DVD-R drive detection, clearer error messages.
-- Eduard Bloch <blade at debian.org> Tue, 23 Jan 2007 19:13:44 +0100
Modified: cdrkit/trunk/wodim/wodim.c
===================================================================
--- cdrkit/trunk/wodim/wodim.c 2007-02-09 22:08:08 UTC (rev 703)
+++ cdrkit/trunk/wodim/wodim.c 2007-02-09 22:15:36 UTC (rev 704)
@@ -3747,9 +3747,10 @@
* 2. Read /proc/sys/dev/cdrom/info, look for a CD-R/DVD-R.
* Will fail for kernel 2.4 or if cdrom module not loaded.
* 3. stat /dev/cdrom, just assume that it can write media.
- */
-#ifdef just_example_for_procfs_file_AND_beware_of_the_TABS
+ An example for procfs file contents, beware of the TABs
+
+---
CD-ROM information, Id: cdrom.c 3.20 2003/12/17
drive name: hdc hda
@@ -3773,8 +3774,8 @@
Can write MRW: 0 1
Can write RAM: 0 1
-
-#endif
+---
+*/
struct stat statbuf;
char *type="CD-R", *guessdev="/dev/cdrw", *result=NULL;
long long filesize=0;
@@ -3799,27 +3800,42 @@
result=guessdev;
else if(0!= (fh = fopen("/proc/sys/dev/cdrom/info", "r")) ) {
/* ok, going the hard way */
- char name[32], buf[256];
- int writecd = -1, writedvd = -1;
+ char *nameline=NULL;
+ static char buf[256];
+ int kn = strlen(key);
- name[0] = '\0';
+ buf[255]='\0';
+
while(fgets(buf, sizeof(buf), fh)) {
- sscanf(buf, "drive name: %31s", name) ||
- sscanf(buf, "Can write CD-R: %d", &writecd) ||
- sscanf(buf, "Can write DVD-R: %d", &writedvd);
-
- if (!name[0] || writecd < 0 || writedvd < 0)
- continue;
-
- if ((writecd && !need_dvdr) ||
- (writedvd && need_dvdr)) {
- sprintf(buf, "/dev/%s", name);
- result = strdup(buf);
- break;
+ if(0==strncmp(buf, "drive name:", 11))
+ nameline=strdup(buf);
+ if(nameline && 0==strncmp(buf, key, kn)) {
+ int p=kn;
+ char *descptr=nameline+11; /* start at the known whitespace */
+ while(p<sizeof(buf) && buf[p]) {
+ if(buf[p]=='1' || buf[p]=='0') {
+ /* find the beginning of the descriptor */
+ for(;isspace((Uchar) *descptr);descptr++)
+ ;
+ }
+ if(buf[p]=='1') {
+ result=descptr-5;
+ /* terminate on space/newline and stop there */
+ for(;*descptr;descptr++) {
+ if(isspace((Uchar) *descptr))
+ *(descptr--)='\0';
+ }
+ strncpy(result, "/dev/", 5);
+ break;
+ }
+ else { /* no hit, move to after word ending */
+ for(; *descptr && ! isspace((Uchar) *descptr); descptr++)
+ ;
+ }
+ p++;
+ }
}
- name[0] = '\0';
- writecd = writedvd = -1;
}
fclose(fh);
}
More information about the Debburn-changes
mailing list