@@ -86,7 +86,11 @@
endif
libdvbmpeg/libdvbmpegtools.a: libdvbmpeg/*.c libdvbmpeg/*.cc libdvbmpeg/*.h libdvbmpeg/*.hh
+ifdef FREEBSD
+ gmake -C ./libdvbmpeg libdvbmpegtools.a FREEBSD=1
+else
make -C ./libdvbmpeg libdvbmpegtools.a
+endif
### Implicit rules:
@@ -132,4 +136,8 @@
clean:
@-rm -f $(COMMONOBJS) $(CLIENTOBJS) $(SERVEROBJS) $(DEPFILE) *.so *.tgz core* *~
+ifdef FREEBSD
+ gmake -C ./libdvbmpeg clean FREEBSD=1
+else
make -C ./libdvbmpeg clean
+endif
@@ -5,6 +5,12 @@
#ifndef VDR_STREAMDEV_COMMON_H
#define VDR_STREAMDEV_COMMON_H
+/* FreeBSD has it's own version of isnumber(),
+ but VDR's version is incompatible */
+#ifdef FreeBSD
+#undef isnumber
+#endif
+
#include <vdr/tools.h>
#include <vdr/plugin.h>
@@ -5,6 +5,9 @@
SRC = $(wildcard *.c)
CPPSRC = $(wildcard *.cpp)
CSRC = $(wildcard *.cc)
+ifdef FREEBSD
+DEFINES += -DFreeBSD
+endif
DESTDIR = /usr/local
@@ -2060,7 +2060,11 @@
if (break_up_filename(name,base_name,path,ext) < 0) exit(1);
+#ifdef FreeBSD
+ if ( (fdin = open(name, O_RDONLY)) < 0){
+#else
if ( (fdin = open(name, O_RDONLY|O_LARGEFILE)) < 0){
+#endif
fprintf(stderr,"Can't open %s\n",name);
exit(1);
}
@@ -2101,8 +2105,12 @@
sprintf(new_name,"%s-%03d.%s",base_name,i,ext);
printf("writing %s\n",new_name);
+#ifdef FreeBSD
+ if ( (fdout = open(new_name,O_WRONLY|O_CREAT|O_TRUNC,
+#else
if ( (fdout = open(new_name,O_WRONLY|O_CREAT|O_TRUNC
|O_LARGEFILE,
+#endif
S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|
S_IROTH|S_IWOTH)) < 0){
fprintf(stderr,"Can't open %s\n",new_name);
@@ -2114,8 +2122,12 @@
sprintf(new_name,"%s-%03d.%s",base_name,i,ext);
printf("writing %s\n",new_name);
+#ifdef FreeBSD
+ if ( (fdout = open(new_name,O_WRONLY|O_CREAT|O_TRUNC,
+#else
if ( (fdout = open(new_name,O_WRONLY|O_CREAT|O_TRUNC
|O_LARGEFILE,
+#endif
S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|
S_IROTH|S_IWOTH)) < 0){
fprintf(stderr,"Can't open %s\n",new_name);
@@ -2144,7 +2156,11 @@
if (break_up_filename(name,base_name,path,ext) < 0) exit(1);
+#ifdef FreeBSD
+ if ( (fdin = open(name, O_RDONLY)) < 0){
+#else
if ( (fdin = open(name, O_RDONLY|O_LARGEFILE)) < 0){
+#endif
fprintf(stderr,"Can't open %s\n",name);
exit(1);
}
@@ -2182,8 +2198,12 @@
sprintf(new_name,"%s-1.%s",base_name,ext);
printf("writing %s\n",new_name);
+#ifdef FreeBSD
+ if ( (fdout = open(new_name,O_WRONLY|O_CREAT|O_TRUNC,
+#else
if ( (fdout = open(new_name,O_WRONLY|O_CREAT|O_TRUNC
|O_LARGEFILE,
+#endif
S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|
S_IROTH|S_IWOTH)) < 0){
fprintf(stderr,"Can't open %s\n",new_name);
@@ -2195,8 +2215,12 @@
sprintf(new_name,"%s-2.%s",base_name,ext);
printf("writing %s\n",new_name);
+#ifdef FreeBSD
+ if ( (fdout = open(new_name,O_WRONLY|O_CREAT|O_TRUNC,
+#else
if ( (fdout = open(new_name,O_WRONLY|O_CREAT|O_TRUNC
|O_LARGEFILE,
+#endif
S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|
S_IROTH|S_IWOTH)) < 0){
fprintf(stderr,"Can't open %s\n",new_name);
@@ -186,7 +186,11 @@
case Event:
if (m_Event != NULL) {
m_State = Title;
+#ifdef FreeBSD
+ return m_Client->Respond(-215, "E %u %d %d %X", m_Event->EventID(),
+#else
return m_Client->Respond(-215, "E %u %ld %d %X", m_Event->EventID(),
+#endif
m_Event->StartTime(), m_Event->Duration(),
m_Event->TableID());
} else {
@@ -225,7 +229,11 @@
case Vps:
m_State = EndEvent;
if (m_Event->Vps())
+#ifdef FreeBSD
+ return m_Client->Respond(-215, "V %d", m_Event->Vps());
+#else
return m_Client->Respond(-215, "V %ld", m_Event->Vps());
+#endif
else
return Next(Last);
break;
@@ -153,5 +153,9 @@
bool cTBSocket::SetDSCP(void) {
int dscp = STREAMDEV_DSCP;
+#ifdef FreeBSD
+ return ::setsockopt(*this, IPPROTO_IP, IP_TOS, &dscp, sizeof(dscp)) != -1;
+#else
return ::setsockopt(*this, SOL_IP, IP_TOS, &dscp, sizeof(dscp)) != -1;
+#endif
}