diff --git a/configure.ac b/configure.ac index 99cf1c6..56c46b1 100644 --- a/configure.ac +++ b/configure.ac @@ -48,14 +48,21 @@ AC_ARG_WITH([default-key-size], AC_MSG_CHECKING(your OS) system=`uname` case $system in - Linux) - AC_DEFINE(OS_LINUX,1,"") - AC_MSG_RESULT(Linux) - ;; + Linux) + AC_DEFINE(OS_LINUX,1,"") + AC_MSG_RESULT(Linux) + ;; + FreeBSD) + AC_DEFINE(OS_FREEBSD,1,"") + AC_MSG_RESULT(FreeBSD) + ;; AIX) - AC_DEFINE(OS_AIX,1,"") + AC_DEFINE(OS_AIX,1,"") AC_MSG_RESULT(AIX) ;; + *) + AC_MSG_ERROR(unknown OS type: $system) + ;; esac AC_MSG_CHECKING(whether to build with static libgcc) diff --git a/src/scsiencrypt.cpp b/src/scsiencrypt.cpp index e1ec891..bd4f10c 100644 --- a/src/scsiencrypt.cpp +++ b/src/scsiencrypt.cpp @@ -21,28 +21,38 @@ GNU General Public License for more details. #include #include #include -#ifdef OS_AIX //AIX + +#ifdef HAVE_UNISTD_H + #include +#endif +#ifdef HAVE_STDLIB_H + #include +#endif +#ifdef HAVE_STRING_H + #include +#endif + +#if defined(OS_LINUX) + #include + #include + #define SCSI_TIMEOUT 5000 +#elif defined(OS_FREEBSD) + #include + #define SCSI_TIMEOUT 5000 +#elif defined(OS_AIX) #define _LINUX_SOURCE_COMPAT #include #include #include #include #define SCSI_TIMEOUT 5 -#else //Linux - #include - #include - #define SCSI_TIMEOUT 5000 - #include - #include - #include +#else + #error "OS type is not set" #endif + #include #include "scsiencrypt.h" -#ifdef HAVE_UNISTD_H - #include //added for archlinux support per fukawi2@gmail.com -#endif - #define SSP_SPIN_OPCODE 0XA2 #define SSP_SPOUT_OPCODE 0XB5 #define SSP_SP_CMD_LEN 12 @@ -298,8 +308,40 @@ bool SCSIExecute(string tapedrive, unsigned char* cmd_p,int cmd_len,unsigned cha int sg_fd,eresult,sresult,ioerr,retries; SCSI_PAGE_SENSE* sd=new SCSI_PAGE_SENSE; memset(sd,0,sizeof(SCSI_PAGE_SENSE)); - -#ifdef OS_AIX //AIX System + +#if defined(OS_LINUX) || defined(OS_FREEBSD) // Linux or FreeBSD System + errno=0; + sg_fd = open(tapedevice, O_RDONLY); + if( sg_fd==-1){ + cerr<<"Could not open device '"<