summaryrefslogtreecommitdiff
path: root/sysutils/amanda-client
diff options
context:
space:
mode:
authorgroo <groo>2000-03-06 21:14:50 +0000
committergroo <groo>2000-03-06 21:14:50 +0000
commit455cae3bcbe9c6e08a7117a5bdcdccb8dcc196ee (patch)
treeb6f2170e7139162278bacd128265f9ed132f5335 /sysutils/amanda-client
parentbd66ba2e2435c9c4f0b01ca205d07605e32c4f25 (diff)
downloadpkgsrc-455cae3bcbe9c6e08a7117a5bdcdccb8dcc196ee.tar.gz
Allow amanda to build with either the 1.4 chio.h or the post-comdex
chio.h. Note: I do *not* own a SCSI tape changer. Testing appreciated! This patch continues to use the old ioctl on new systems. If it worked before, it should continue to work. Fixes PR pkg/8651.
Diffstat (limited to 'sysutils/amanda-client')
-rw-r--r--sysutils/amanda-client/files/patch-sum3
-rw-r--r--sysutils/amanda-client/patches/patch-ag163
2 files changed, 165 insertions, 1 deletions
diff --git a/sysutils/amanda-client/files/patch-sum b/sysutils/amanda-client/files/patch-sum
index a21dacc2157..74fe127b56c 100644
--- a/sysutils/amanda-client/files/patch-sum
+++ b/sysutils/amanda-client/files/patch-sum
@@ -1,4 +1,4 @@
-$NetBSD: patch-sum,v 1.3 1999/09/06 18:09:05 bad Exp $
+$NetBSD: patch-sum,v 1.4 2000/03/06 21:14:51 groo Exp $
MD5 (patch-aa) = 6b367d0b59e5ef883734a896edbb2623
MD5 (patch-ab) = 488f351bda45b411c260bd3d8ee7f6f9
@@ -6,3 +6,4 @@ MD5 (patch-ac) = 3168a2b696288eaf9feb148eb5fb7831
MD5 (patch-ad) = fa20c139b28094d4b7a848f16ffcb9e3
MD5 (patch-ae) = 1178c5d7cd28a8230df4bffe33dd99a7
MD5 (patch-af) = 9115d1218ee47e59b7dc68dd09fef71f
+MD5 (patch-ag) = dc79d66683986442e288cb93b779f1ab
diff --git a/sysutils/amanda-client/patches/patch-ag b/sysutils/amanda-client/patches/patch-ag
new file mode 100644
index 00000000000..3935707aaa3
--- /dev/null
+++ b/sysutils/amanda-client/patches/patch-ag
@@ -0,0 +1,163 @@
+--- changer-src/scsi-chio.c.orig Wed Jul 8 00:04:04 1998
++++ changer-src/scsi-chio.c Mon Mar 6 15:26:26 2000
+@@ -119,25 +119,41 @@
+ */
+ int isempty(int fd, int slot)
+ {
++#if defined(OCHIOGSTATUS)
++struct ochanger_element_status_request cesr;
++#else
+ struct changer_element_status ces;
++#endif
++
+ int i,rc;
+ int type=CHET_ST;
+
+ get_changer_info(fd);
+
++#if defined(OCHIOGSTATUS)
++ cesr.cesr_type = type;
++ cesr.cesr_data = malloc(changer_info.cp_nslots);
++ rc = ioctl(fd, OCHIOGSTATUS, &cesr);
++#else
+ ces.ces_type = type;
+ ces.ces_data = malloc(changer_info.cp_nslots);
+-
+ rc = ioctl(fd, CHIOGSTATUS, &ces);
++#endif
++
+ if (rc) {
+ fprintf(stderr,"%s: changer status query failed: 0x%x %s\n",
+ get_pname(), rc,strerror(errno));
+ return -1;
+ }
+
++#if defined(OCHIOGSTATUS)
++ i = cesr.cesr_data[slot] & CESTATUS_FULL;
++ free(cesr.cesr_data);
++#else
+ i = ces.ces_data[slot] & CESTATUS_FULL;
+-
+ free(ces.ces_data);
++#endif
++
+ return !i;
+ }
+
+@@ -146,16 +162,27 @@
+ */
+ int find_empty(int fd)
+ {
++#if defined(OCHIOGSTATUS)
++struct ochanger_element_status_request cesr;
++#else
+ struct changer_element_status ces;
++#endif
++
+ int i,rc;
+ int type=CHET_ST;
+
+ get_changer_info(fd);
+
++#if defined(OCHIOGSTATUS)
++ cesr.cesr_type = type;
++ cesr.cesr_data = malloc(changer_info.cp_nslots);
++ rc = ioctl(fd, OCHIOGSTATUS, &cesr);
++#else
+ ces.ces_type = type;
+ ces.ces_data = malloc(changer_info.cp_nslots);
++ rc = ioctl(fd, CHIOGSTATUS, &ces);
++#endif
+
+- rc = ioctl(fd,CHIOGSTATUS,&ces);
+ if (rc) {
+ fprintf(stderr,"%s: changer status query failed: 0x%x %s\n",
+ get_pname(), rc, strerror(errno));
+@@ -163,9 +190,17 @@
+ }
+
+ i = 0;
++
++#if defined(OCHIOGSTATUS)
++ while ((i < changer_info.cp_nslots)&&(cesr.cesr_data[i] & CESTATUS_FULL))
++ i++;
++ free(cesr.cesr_data);
++#else
+ while ((i < changer_info.cp_nslots)&&(ces.ces_data[i] & CESTATUS_FULL))
+ i++;
+ free(ces.ces_data);
++#endif
++
+ return i;
+ }
+
+@@ -174,25 +209,41 @@
+ */
+ int drive_loaded(int fd, int drivenum)
+ {
++#if defined(OCHIOGSTATUS)
++struct ochanger_element_status_request cesr;
++#else
+ struct changer_element_status ces;
++#endif
++
+ int i,rc;
+ int type=CHET_DT;
+
+ get_changer_info(fd);
+
++#if defined(OCHIOGSTATUS)
++ cesr.cesr_type = type;
++ cesr.cesr_data = malloc(changer_info.cp_ndrives);
++ rc = ioctl(fd, OCHIOGSTATUS, &cesr);
++#else
+ ces.ces_type = type;
+ ces.ces_data = malloc(changer_info.cp_ndrives);
+-
+ rc = ioctl(fd, CHIOGSTATUS, &ces);
++#endif
++
+ if (rc) {
+ fprintf(stderr,"%s: drive status query failed: 0x%x %s\n",
+ get_pname(), rc, strerror(errno));
+ return -1;
+ }
+
++#if defined(OCHIOGSTATUS)
++ i = (cesr.cesr_data[drivenum] & CESTATUS_FULL);
++ free(cesr.cesr_data);
++#else
+ i = (ces.ces_data[drivenum] & CESTATUS_FULL);
+-
+ free(ces.ces_data);
++#endif
++
+ return i;
+ }
+
+@@ -202,7 +253,12 @@
+ */
+ int unload(int fd, int drive, int slot)
+ {
++#if defined(OCHIOGSTATUS)
++struct changer_move_request move;
++#else
+ struct changer_move move;
++#endif
++
+ int rc;
+
+ move.cm_fromtype = CHET_DT;
+@@ -226,7 +282,12 @@
+ */
+ int load(int fd, int drive, int slot)
+ {
++#if defined(OCHIOGSTATUS)
++struct changer_move_request move;
++#else
+ struct changer_move move;
++#endif
++
+ int rc;
+
+ move.cm_fromtype = CHET_ST;