Fix a crash on startup when /proc/ide does not exist.

This commit is contained in:
Frank Richter 2005-08-11 17:05:47 +00:00 committed by Alexandre Julliard
parent 36258675ad
commit 59970a7c04
1 changed files with 41 additions and 38 deletions

View File

@ -353,54 +353,57 @@ static void create_hardware_branch(void)
/* Enumerate all ide devices first */ /* Enumerate all ide devices first */
idedir = opendir("/proc/ide"); idedir = opendir("/proc/ide");
for (dent=readdir(idedir); dent; dent = readdir(idedir)) if (idedir)
{ {
if (strncmp(dent->d_name, "hd", 2) == 0) while ((dent = readdir(idedir)))
{ {
sprintf(cStr, procname_ide_media, dent->d_name); if (strncmp(dent->d_name, "hd", 2) == 0)
procfile = fopen(cStr, "r");
if (!procfile)
{ {
ERR("Could not open %s\n", cStr); sprintf(cStr, procname_ide_media, dent->d_name);
continue; procfile = fopen(cStr, "r");
} else { if (!procfile)
fgets(cStr, sizeof(cStr), procfile);
fclose(procfile);
nType = DRIVE_UNKNOWN;
if (strncasecmp(cStr, "disk", 4) == 0) nType = DRIVE_FIXED;
if (strncasecmp(cStr, "cdrom", 5) == 0) nType = DRIVE_CDROM;
if (nType == DRIVE_UNKNOWN) continue;
}
sprintf(cStr, procname_ide_model, dent->d_name);
procfile = fopen(cStr, "r");
if (!procfile)
{
ERR("Could not open %s\n", cStr);
switch (nType)
{ {
ERR("Could not open %s\n", cStr);
continue;
} else {
fgets(cStr, sizeof(cStr), procfile);
fclose(procfile);
nType = DRIVE_UNKNOWN;
if (strncasecmp(cStr, "disk", 4) == 0) nType = DRIVE_FIXED;
if (strncasecmp(cStr, "cdrom", 5) == 0) nType = DRIVE_CDROM;
if (nType == DRIVE_UNKNOWN) continue;
}
sprintf(cStr, procname_ide_model, dent->d_name);
procfile = fopen(cStr, "r");
if (!procfile)
{
ERR("Could not open %s\n", cStr);
switch (nType)
{
case DRIVE_FIXED: strcpy(cDevModel, "Wine harddisk"); break; case DRIVE_FIXED: strcpy(cDevModel, "Wine harddisk"); break;
case DRIVE_CDROM: strcpy(cDevModel, "Wine CDROM"); break; case DRIVE_CDROM: strcpy(cDevModel, "Wine CDROM"); break;
}
} else {
fgets(cDevModel, sizeof(cDevModel), procfile);
fclose(procfile);
cDevModel[strlen(cDevModel) - 1] = 0;
} }
} else {
fgets(cDevModel, sizeof(cDevModel), procfile); sprintf(cUnixDeviceName, "/dev/%s", dent->d_name);
fclose(procfile); scsi_addr.PortNumber = (dent->d_name[2] - 'a') / 2;
cDevModel[strlen(cDevModel) - 1] = 0; scsi_addr.PathId = 0;
scsi_addr.TargetId = (dent->d_name[2] - 'a') % 2;
scsi_addr.Lun = 0;
if (scsi_addr.PortNumber + 1 > uFirstSCSIPort)
uFirstSCSIPort = scsi_addr.PortNumber + 1;
create_scsi_entry(&scsi_addr, "atapi", nType, cDevModel, cUnixDeviceName);
} }
sprintf(cUnixDeviceName, "/dev/%s", dent->d_name);
scsi_addr.PortNumber = (dent->d_name[2] - 'a') / 2;
scsi_addr.PathId = 0;
scsi_addr.TargetId = (dent->d_name[2] - 'a') % 2;
scsi_addr.Lun = 0;
if (scsi_addr.PortNumber + 1 > uFirstSCSIPort)
uFirstSCSIPort = scsi_addr.PortNumber + 1;
create_scsi_entry(&scsi_addr, "atapi", nType, cDevModel, cUnixDeviceName);
} }
closedir(idedir);
} }
closedir(idedir);
/* Now goes SCSI */ /* Now goes SCSI */
procfile = fopen(procname_scsi, "r"); procfile = fopen(procname_scsi, "r");