/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 1991-2003 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
#include <stdlib.h>
#include <unistd.h>
#include <AudioRawPipe.h>
#include <libaudio.h>
#include <audio_hdr.h>
// class AudioPipe methods
// Constructor with file descriptor, mode, and optional name
const int desc, // file descriptor
const char *name_local, // name
{
}
// The create routine for pipes writes a file header
Create()
{
// Was the header properly set?
if (err != AUDIO_SUCCESS)
return (RaiseError(err));
// Open fd supplied by constructor
}
// set flag for opened() test
// Set the actual output length to zero
setlength(0.);
return (AUDIO_SUCCESS);
}
// The open routine for raw pipes validates the header and
// init's the read pos to offset and sets the opened flag.
Open()
{
// The constructor should have supplied a valid fd
// If fd is not open, or file header already decoded, skip it
// Stat the file, to see if it is a regular file
return (RaiseError(AUDIO_UNIXERROR));
// check validity of file header
if (err != AUDIO_SUCCESS) {
setfd(-1);
return (err);
}
// Only trust the file size for regular files
// for raw files - no hdr, so it's the whole file minus
// the offset.
} else {
// don't know ...
}
// set flag for opened() test
// reset logical position to 0.0, since this is, in effect,
// the beginning of the file.
return (err);
}
opened() const
{
return (isopened);
}
{
// only read only files for now
return (AUDIO_ERR_NOEFFECT);
}
// only allow this if we haven't read anything yet (i.e. current
// position is 0).
if (ReadPosition() != 0.) {
return (AUDIO_ERR_NOEFFECT);
}
!= AUDIO_SUCCESS) {
return (err);
}
// this should *never* happen 'cause seekread just sets setting
// to GetHeader().Time_to_Bytes....
// don't really know what error is apropos for this.
return (AUDIO_ERR_BADFRAME);
}
return (AUDIO_SUCCESS);
}
GetOffset() const
{
return (offset);
}