Using uname() rather than #ifdef __FreeBSD__
This commit is contained in:
parent
8e131041a4
commit
ab691084c6
@ -90,6 +90,7 @@ or
|
|||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
#include <grp.h>
|
#include <grp.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
#include <sys/utsname.h>
|
||||||
|
|
||||||
/* for -charset */
|
/* for -charset */
|
||||||
#include <iconv.h>
|
#include <iconv.h>
|
||||||
@ -1530,6 +1531,31 @@ int Wait_for_input(int fd, int microsec, int flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int System_uname(char **sysname, char **release, char **version,
|
||||||
|
char **machine, int flag)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
static struct utsname uts;
|
||||||
|
static int initialized= 0;
|
||||||
|
|
||||||
|
if(initialized == 0) {
|
||||||
|
ret= uname(&uts);
|
||||||
|
if(ret != 0)
|
||||||
|
initialized = -1;
|
||||||
|
}
|
||||||
|
if(initialized == -1)
|
||||||
|
return(0);
|
||||||
|
if(sysname != NULL)
|
||||||
|
*sysname= uts.sysname;
|
||||||
|
if(release != NULL)
|
||||||
|
*release= uts.release;
|
||||||
|
if(version != NULL)
|
||||||
|
*version= uts.version;
|
||||||
|
if(machine != NULL)
|
||||||
|
*machine= uts.machine;
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------ */
|
/* ------------------------------------------------------------------------ */
|
||||||
|
|
||||||
|
|
||||||
@ -10319,7 +10345,7 @@ int Xorriso_make_mount_cmd(struct XorrisO *xorriso, char *cmd,
|
|||||||
{
|
{
|
||||||
int ret, reg_file= 0, is_safe= 0, sys_code= 0;
|
int ret, reg_file= 0, is_safe= 0, sys_code= 0;
|
||||||
char form[6*SfileadrL], session_text[12], track_text[12], lba_text[12];
|
char form[6*SfileadrL], session_text[12], track_text[12], lba_text[12];
|
||||||
char *vars[5][2], sfe[5*SfileadrL], volid_sfe[5*80+1], *cpt;
|
char *vars[5][2], sfe[5*SfileadrL], volid_sfe[5*80+1], *cpt, *sysname;
|
||||||
struct stat stbuf;
|
struct stat stbuf;
|
||||||
|
|
||||||
if(strlen(cmd) > SfileadrL) {
|
if(strlen(cmd) > SfileadrL) {
|
||||||
@ -10345,11 +10371,22 @@ too_long:;
|
|||||||
strcpy(form, cpt);
|
strcpy(form, cpt);
|
||||||
} else {
|
} else {
|
||||||
cpt= cmd;
|
cpt= cmd;
|
||||||
#ifdef __FreeBSD__
|
ret= System_uname(&sysname, NULL, NULL, NULL, 0);
|
||||||
sys_code= 2;
|
if(ret <= 0) {
|
||||||
#else
|
Xorriso_msgs_submit(xorriso, 0,
|
||||||
sys_code= 1;
|
"-mount*: Cannot determine current system type",
|
||||||
#endif
|
0, "FAILURE", 0);
|
||||||
|
return(0);
|
||||||
|
} else if(strcmp(sysname, "FreeBSD") == 0) {
|
||||||
|
sys_code= 2;
|
||||||
|
} else if(strcmp(sysname, "Linux") == 0) {
|
||||||
|
sys_code= 1;
|
||||||
|
} else {
|
||||||
|
sprintf(xorriso->info_text, "-mount*: Unsupported system type %s",
|
||||||
|
Text_shellsafe(sysname, sfe, 0));
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(sys_code == 1) { /* Linux */
|
if(sys_code == 1) { /* Linux */
|
||||||
@ -10364,10 +10401,19 @@ too_long:;
|
|||||||
(Real CD drives look like /dev/cd0)
|
(Real CD drives look like /dev/cd0)
|
||||||
*/
|
*/
|
||||||
if(reg_file) {
|
if(reg_file) {
|
||||||
|
/* <<<
|
||||||
strcpy(form, "n=$(mdconfig -a -t vnode -f %device%)");
|
strcpy(form, "n=$(mdconfig -a -t vnode -f %device%)");
|
||||||
sprintf(form + strlen(form),
|
sprintf(form + strlen(form),
|
||||||
" && mount -t cd9660 -o noexec,nosuid -s %%sbsector%% \"$n\" %s",
|
" && mount -t cd9660 -o noexec,nosuid -s %%sbsector%% /dev/\"$n\" %s",
|
||||||
Text_shellsafe(cmd+8, sfe, 0));
|
Text_shellsafe(cmd+8, sfe, 0));
|
||||||
|
*/
|
||||||
|
Xorriso_msgs_submit(xorriso, 0,
|
||||||
|
"Detected regular file as mount device with FreeBSD style command.",
|
||||||
|
0, "FAILURE", 0);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0,
|
||||||
|
"Command mdconfig -a -t vnode -f can create a device node which uses the file",
|
||||||
|
0, "HINT", 0);
|
||||||
|
return(0);
|
||||||
} else
|
} else
|
||||||
sprintf(form,
|
sprintf(form,
|
||||||
"mount -t cd9660 -o noexec,nosuid -s %%sbsector%% %%device%% %s",
|
"mount -t cd9660 -o noexec,nosuid -s %%sbsector%% %%device%% %s",
|
||||||
|
@ -120,6 +120,9 @@ Can perform multi-session tasks as emulation of mkisofs and cdrecord.
|
|||||||
Can restore single files and whole trees from ISO image to disk filesystem.
|
Can restore single files and whole trees from ISO image to disk filesystem.
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
|
Can issue commands to mount older sessions on Linux or FreeBSD.
|
||||||
|
</LI>
|
||||||
|
<LI>
|
||||||
Can check media for damages and copy readable blocks to disk.
|
Can check media for damages and copy readable blocks to disk.
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
@ -430,15 +433,18 @@ Enhancements towards previous stable version xorriso-0.2.8.pl01:
|
|||||||
<DD>Bug fixes towards xorriso-0.3.0.pl00:
|
<DD>Bug fixes towards xorriso-0.3.0.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
|
|
||||||
<LI>- none yet -</LI>
|
<LI>Options -extract and -extract_single were not disabled with -osirrox off
|
||||||
|
</LI>
|
||||||
<!--
|
<!--
|
||||||
|
<LI>- none yet -</LI>
|
||||||
-->
|
-->
|
||||||
</UL>
|
</UL>
|
||||||
</DD>
|
</DD>
|
||||||
<DD>Enhancements towards stable version 0.3.0.pl00:
|
<DD>Enhancements towards stable version 0.3.0.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>- none yet -</LI>
|
<LI>New options -mount and -mount_cmd</LI>
|
||||||
<!--
|
<!--
|
||||||
|
<LI>- none yet -</LI>
|
||||||
-->
|
-->
|
||||||
</UL>
|
</UL>
|
||||||
</DD>
|
</DD>
|
||||||
|
@ -647,6 +647,9 @@ char *Ftypetxt(mode_t st_mode, int flag);
|
|||||||
*/
|
*/
|
||||||
char *Ftimetxt(time_t t, char timetext[40], int flag);
|
char *Ftimetxt(time_t t, char timetext[40], int flag);
|
||||||
|
|
||||||
|
int System_uname(char **sysname, char **release, char **version,
|
||||||
|
char **machine, int flag);
|
||||||
|
|
||||||
|
|
||||||
struct DirseQ;
|
struct DirseQ;
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2008.12.05.171700"
|
#define Xorriso_timestamP "2008.12.06.140828"
|
||||||
|
@ -8421,10 +8421,10 @@ int Xorriso_mount(struct XorrisO *xorriso, char *dev, int adr_mode,
|
|||||||
char *adr_value, char *cmd, int flag)
|
char *adr_value, char *cmd, int flag)
|
||||||
{
|
{
|
||||||
int ret, lba, track, session, params_flag= 0, is_safe= 0, is_extra_drive= 0;
|
int ret, lba, track, session, params_flag= 0, is_safe= 0, is_extra_drive= 0;
|
||||||
int give_up= 0;
|
int give_up= 0, mount_chardev= 0;
|
||||||
char volid[33], *devadr, mount_command[SfileadrL], adr_data[163], *adr_pt;
|
char volid[33], *devadr, mount_command[SfileadrL], adr_data[163], *adr_pt;
|
||||||
char *dev_path, libburn_adr[BURN_DRIVE_ADR_LEN + SfileadrL];
|
char *dev_path, libburn_adr[BURN_DRIVE_ADR_LEN + SfileadrL];
|
||||||
char sfe[5 * SfileadrL], *dpt;
|
char sfe[5 * SfileadrL], *dpt, *sysname= "";
|
||||||
struct stat stbuf;
|
struct stat stbuf;
|
||||||
struct burn_drive_info *dinfo= NULL;
|
struct burn_drive_info *dinfo= NULL;
|
||||||
struct burn_drive *drive= NULL;
|
struct burn_drive *drive= NULL;
|
||||||
@ -8466,7 +8466,11 @@ int Xorriso_mount(struct XorrisO *xorriso, char *dev, int adr_mode,
|
|||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
ret= 0; goto ex;
|
ret= 0; goto ex;
|
||||||
}
|
}
|
||||||
if(!(S_ISREG(stbuf.st_mode) || S_ISBLK(stbuf.st_mode))) {
|
ret= System_uname(&sysname, NULL, NULL, NULL, 0);
|
||||||
|
if(ret > 0 && strcmp(sysname, "FreeBSD") == 0)
|
||||||
|
mount_chardev= 1;
|
||||||
|
if(!(S_ISREG(stbuf.st_mode) || (S_ISBLK(stbuf.st_mode) && !mount_chardev)
|
||||||
|
|| (S_ISCHR(stbuf.st_mode) && !mount_chardev))) {
|
||||||
sprintf(xorriso->info_text,
|
sprintf(xorriso->info_text,
|
||||||
"File object is not suitable as mount device: %s",
|
"File object is not suitable as mount device: %s",
|
||||||
Text_shellsafe(dev_path, sfe, 0));
|
Text_shellsafe(dev_path, sfe, 0));
|
||||||
|
Loading…
Reference in New Issue
Block a user