On Thu, Oct 27, 2022 at 01:08:57PM +0000, Klemens Nanni wrote:
> @@ -1040,6 +1041,9 @@ ad1848_open(void *addr, int flags)
>  
>       DPRINTF(("ad1848_open: sc=%p\n", sc));
>  
> +     if ((flags & (FWRITE | FREAD)) && sc->mode != 2)
> +             return ENXIO;
> +
>       sc->sc_pintr = sc->sc_parg = NULL;
>       sc->sc_rintr = sc->sc_rarg = NULL;
>  

afaiu, the correct condition for full-duplex check is:

        if ((flags & (FWRITE | FREAD)) == (FWRITE | FREAD))
                ...

(both FWRITE and FREAD set)

> @@ -982,6 +980,15 @@ essattach(struct ess_softc *sc)
>   * Various routines to interface to higher level audio driver
>   */
>  
> +int
> +ess_1788_open(void *addr, int flags)
> +{
> +     if (flags & (FWRITE | FREAD))
> +             return ENXIO;
> +
> +     return ess_open(addr, flags);
> +}
> +
>  int
>  ess_open(void *addr, int flags)
>  {
> @@ -2059,18 +2066,6 @@ ess_round_buffersize(void *addr, int direction, size_t 
> size)

same here.

> @@ -307,6 +305,9 @@ gusopen(void *addr, int flags)
>  
>       DPRINTF(("gusopen() called\n"));
>  
> +     if ((flags & (FWRITE | FREAD)) && sc->sc_recdrq == sc->sc_drq)
> +             return ENXIO;
> +
>       if (sc->sc_flags & GUS_OPEN)
>               return EBUSY;
>  

ditto

> @@ -2132,6 +2126,8 @@ sbdsp_midi_open(void *addr, int flags, void 
> (*iintr)(void *, int),
>  
>          DPRINTF(("sbdsp_midi_open: sc=%p\n", sc));
>  
> +     if ((flags & (FWRITE | FREAD)) && !sc->sc_fullduplex)
> +             return ENXIO;

ditto

Reply via email to