File ossp-fixes-20130128.patch of Package ossp
--- ossp-1.3.2/Makefile 2010-10-04 15:07:25.000000000 +0200
+++ ossp-1.3.2/Makefile 2017-11-15 20:46:16.319281853 +0100
@@ -2,9 +2,9 @@
# DESTDIR is completely respected
CC := gcc
AR := ar
-CFLAGS := -Wall $(CFLAGS)
+CFLAGS := -Wall -pthread $(CFLAGS) $(CPPFLAGS)
XLDFLAGS := $(LDFLAGS)
-LDFLAGS := -L. -lossp $(LDFLAGS)
+LDFLAGS := -L. -lossp -lrt -pthread $(LDFLAGS)
prefix := /usr/local
DESTDIR :=
UDEVDIR := /etc/udev/rules.d
--- ossp-1.3.2/osspd.c 2010-10-04 15:07:25.000000000 +0200
+++ ossp-1.3.2/osspd.c 2017-11-15 20:47:02.674606064 +0100
@@ -469,15 +469,6 @@
return; \
} while (0)
-#define IOCTL_RETURN(result, outp) do { \
- if ((outp) != NULL) \
- fuse_reply_ioctl(req, result, (outp), sizeof(*(outp))); \
- else \
- fuse_reply_ioctl(req, result, NULL, 0); \
- return; \
-} while (0)
-
-
/***************************************************************************
* Mixer implementation
*/
@@ -709,7 +700,8 @@
strncpy(info.id, id, sizeof(info.id) - 1);
strncpy(info.name, name, sizeof(info.name) - 1);
info.modify_counter = mixer->modify_counter;
- IOCTL_RETURN(0, &info);
+ fuse_reply_ioctl(req, 0, &info, sizeof(info));
+ break;
}
case SOUND_OLD_MIXER_INFO: {
@@ -718,7 +710,8 @@
PREP_UARG(NULL, &info);
strncpy(info.id, id, sizeof(info.id) - 1);
strncpy(info.name, name, sizeof(info.name) - 1);
- IOCTL_RETURN(0, &info);
+ fuse_reply_ioctl(req, 0, &info, sizeof(info));
+ break;
}
case OSS_GETVERSION:
@@ -737,16 +730,16 @@
goto puti;
puti:
PREP_UARG(NULL, &i);
- IOCTL_RETURN(0, &i);
+ fuse_reply_ioctl(req, 0, &i, sizeof(i));
+ break;
case SOUND_MIXER_WRITE_RECSRC:
- IOCTL_RETURN(0, NULL);
+ fuse_reply_ioctl(req, 0, NULL, 0);
+ break;
default:
*not_minep = 1;
- return;
}
- assert(0);
}
static void mixer_do_ioctl(fuse_req_t req, struct ossp_mixer *mixer,
@@ -787,7 +780,8 @@
break;
default:
i = 0;
- IOCTL_RETURN(0, &i);
+ fuse_reply_ioctl(req, 0, &i, sizeof(i));
+ return;
}
init_mixer_cmd(&mxcmd, mixer);
@@ -837,7 +831,12 @@
finish_mixer_cmd(&mxcmd);
free(osa);
- IOCTL_RETURN(0, out_bufsz ? &mxcmd.rvol : NULL);
+ if (out_bufsz)
+ fuse_reply_ioctl(req, 0, &mxcmd.rvol, sizeof(mxcmd.rvol));
+ else
+ fuse_reply_ioctl(req, 0, NULL, 0);
+
+ return;
err:
fuse_reply_err(req, -rc);
@@ -1510,7 +1509,8 @@
case OSS_GETVERSION:
i = SNDRV_OSS_VERSION;
PREP_UARG(NULL, &i);
- IOCTL_RETURN(0, &i);
+ fuse_reply_ioctl(req, 0, &i, sizeof(i));
+ break;
case SNDCTL_DSP_GETCAPS:
i = DSP_CAP_DUPLEX | DSP_CAP_REALTIME | DSP_CAP_TRIGGER |
@@ -1519,12 +1519,14 @@
#endif
DSP_CAP_MULTI;
PREP_UARG(NULL, &i);
- IOCTL_RETURN(0, &i);
+ fuse_reply_ioctl(req, 0, &i, sizeof(i));
+ break;
case SNDCTL_DSP_NONBLOCK:
dsps->nonblock = 1;
ret = 0;
- IOCTL_RETURN(0, NULL);
+ fuse_reply_ioctl(req, 0, NULL, 0);
+ break;
case SNDCTL_DSP_RESET: op = OSSP_DSP_RESET; goto nd;
case SNDCTL_DSP_SYNC: op = OSSP_DSP_SYNC; goto nd;
@@ -1533,7 +1535,8 @@
ret = exec_simple_cmd(&dsps->os, op, NULL, NULL);
if (ret)
goto err;
- IOCTL_RETURN(0, NULL);
+ fuse_reply_ioctl(req, 0, NULL, 0);
+ break;
case SOUND_PCM_READ_RATE: op = OSSP_DSP_GET_RATE; goto ri;
case SOUND_PCM_READ_BITS: op = OSSP_DSP_GET_FORMAT; goto ri;
@@ -1546,7 +1549,8 @@
ret = exec_simple_cmd(&dsps->os, op, NULL, &i);
if (ret)
goto err;
- IOCTL_RETURN(0, &i);
+ fuse_reply_ioctl(req, 0, &i, sizeof(i));
+ break;
case SNDCTL_DSP_SPEED: op = OSSP_DSP_SET_RATE; goto wi;
case SNDCTL_DSP_SETFMT: op = OSSP_DSP_SET_FORMAT; goto wi;
@@ -1557,7 +1561,8 @@
ret = exec_simple_cmd(&dsps->os, op, &i, &i);
if (ret)
goto err;
- IOCTL_RETURN(0, &i);
+ fuse_reply_ioctl(req, 0, &i, sizeof(i));
+ break;
case SNDCTL_DSP_STEREO:
PREP_UARG(NULL, &i);
@@ -1566,7 +1571,8 @@
i--;
if (ret)
goto err;
- IOCTL_RETURN(0, &i);
+ fuse_reply_ioctl(req, 0, &i, sizeof(i));
+ break;
case SNDCTL_DSP_SETFRAGMENT:
PREP_UARG(&i, NULL);
@@ -1574,7 +1580,8 @@
OSSP_DSP_SET_FRAGMENT, &i, NULL);
if (ret)
goto err;
- IOCTL_RETURN(0, NULL);
+ fuse_reply_ioctl(req, 0, NULL, 0);
+ break;
case SNDCTL_DSP_SETTRIGGER:
PREP_UARG(&i, NULL);
@@ -1582,7 +1589,8 @@
OSSP_DSP_SET_TRIGGER, &i, NULL);
if (ret)
goto err;
- IOCTL_RETURN(0, NULL);
+ fuse_reply_ioctl(req, 0, NULL, 0);
+ break;
case SNDCTL_DSP_GETOSPACE:
case SNDCTL_DSP_GETISPACE: {
@@ -1603,7 +1611,8 @@
ret = exec_simple_cmd(&dsps->os, op, NULL, &info);
if (ret)
goto err;
- IOCTL_RETURN(0, &info);
+ fuse_reply_ioctl(req, 0, &info, sizeof(info));
+ break;
}
case SNDCTL_DSP_GETOPTR:
@@ -1616,14 +1625,16 @@
ret = exec_simple_cmd(&dsps->os, op, NULL, &info);
if (ret)
goto err;
- IOCTL_RETURN(0, &info);
+ fuse_reply_ioctl(req, 0, &info, sizeof(info));
+ break;
}
case SNDCTL_DSP_GETODELAY:
PREP_UARG(NULL, &i);
i = 0;
ret = exec_simple_cmd(&dsps->os, OSSP_DSP_GET_ODELAY, NULL, &i);
- IOCTL_RETURN(ret, &i); /* always copy out result, 0 on err */
+ fuse_reply_ioctl(req, ret, &i, sizeof(i)); /* always copy out result, 0 on err */
+ break;
case SOUND_PCM_WRITE_FILTER:
case SOUND_PCM_READ_FILTER:
@@ -1638,14 +1649,16 @@
case SNDCTL_DSP_SETSYNCRO:
case SNDCTL_DSP_SETDUPLEX:
case SNDCTL_DSP_PROFILE:
- IOCTL_RETURN(0, NULL);
+ fuse_reply_ioctl(req, 0, NULL, 0);
+ break;
default:
warn_os(os, "unknown ioctl 0x%x", cmd);
ret = -EINVAL;
goto err;
}
- assert(0); /* control shouldn't reach here */
+ return;
+
err:
fuse_reply_err(req, -ret);
}
@@ -1839,6 +1852,7 @@
pthread_mutex_unlock(&mutex);
}
goto repeat;
+ return NULL; /* Unreachable */
}
@@ -2109,7 +2123,7 @@
switch (key) {
case 0:
- fprintf(stderr, usage);
+ fputs(usage, stderr);
param->help = 1;
return 0;
case 1:
@@ -2253,7 +2267,7 @@
param.mixer_major, param.mixer_minor,
args.argc, args.argv);
if (strlen(param.adsp_name))
- adsp_se = setup_ossp_cuse(&dsp_ops, param.adsp_name,
+ adsp_se = setup_ossp_cuse(&adsp_ops, param.adsp_name,
param.adsp_major, param.adsp_minor,
args.argc, args.argv);
--- ossp-1.3.2/ossp-padsp.c 2010-10-04 15:07:25.000000000 +0200
+++ ossp-1.3.2/ossp-padsp.c 2017-11-15 20:40:36.108333829 +0100
@@ -972,16 +972,13 @@
static void stream_rw_callback(pa_stream *s, size_t length, void *userdata)
{
- int dir;
size_t size;
if (s == stream[PLAY]) {
- dir = PLAY;
size = pa_stream_writable_size(s);
if (mmap_map[PLAY])
do_mmap_write(size);
} else if (s == stream[REC]) {
- dir = REC;
size = pa_stream_readable_size(s);
if (mmap_map[REC])
do_mmap_read(size);
--- ossp-1.3.2/ossp-slave.c 2010-10-04 15:07:25.000000000 +0200
+++ ossp-1.3.2/ossp-slave.c 2017-11-15 20:44:13.313087623 +0100
@@ -89,7 +89,7 @@
}
if (!have_uid || !have_gid || ossp_cmd_fd < 0 || ossp_notify_fd < 0) {
- fprintf(stderr, usage);
+ fputs(usage, stderr);
_exit(1);
}
@@ -105,7 +105,7 @@
void *p;
if (!mmap_off || !mmap_size) {
- fprintf(stderr, usage);
+ fputs(usage, stderr);
_exit(1);
}