⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 file_io_ansi.c

📁 基于sip协议的网络电话源码
💻 C
字号:
/* $Id: file_io_ansi.c 1073 2007-03-16 08:56:05Z bennylp $ *//*  * Copyright (C)2003-2007 Benny Prijono <benny@prijono.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  */#include <pj/file_io.h>#include <pj/assert.h>#include <pj/errno.h>#include <stdio.h>#include <errno.h>PJ_DEF(pj_status_t) pj_file_open( pj_pool_t *pool,                                  const char *pathname,                                   unsigned flags,                                  pj_oshandle_t *fd){    char mode[8];    char *p = mode;    PJ_ASSERT_RETURN(pathname && fd, PJ_EINVAL);    PJ_UNUSED_ARG(pool);    if ((flags & PJ_O_APPEND) == PJ_O_APPEND) {        if ((flags & PJ_O_WRONLY) == PJ_O_WRONLY) {            *p++ = 'a';            if ((flags & PJ_O_RDONLY) == PJ_O_RDONLY)                *p++ = '+';        } else {            /* This is invalid.             * Can not specify PJ_O_RDONLY with PJ_O_APPEND!              */        }    } else {        if ((flags & PJ_O_RDONLY) == PJ_O_RDONLY) {            *p++ = 'r';            if ((flags & PJ_O_WRONLY) == PJ_O_WRONLY)                *p++ = '+';        } else {            *p++ = 'w';        }    }    if (p==mode)        return PJ_EINVAL;    *p++ = 'b';    *p++ = '\0';    *fd = fopen(pathname, mode);    if (*fd == NULL)        return PJ_RETURN_OS_ERROR(errno);        return PJ_SUCCESS;}PJ_DEF(pj_status_t) pj_file_close(pj_oshandle_t fd){    PJ_ASSERT_RETURN(fd, PJ_EINVAL);    if (fclose((FILE*)fd) != 0)        return PJ_RETURN_OS_ERROR(errno);    return PJ_SUCCESS;}PJ_DEF(pj_status_t) pj_file_write( pj_oshandle_t fd,                                   const void *data,                                   pj_ssize_t *size){    size_t written;    clearerr((FILE*)fd);    written = fwrite(data, 1, *size, (FILE*)fd);    if (ferror((FILE*)fd)) {        *size = -1;        return PJ_RETURN_OS_ERROR(errno);    }    *size = written;    return PJ_SUCCESS;}PJ_DEF(pj_status_t) pj_file_read( pj_oshandle_t fd,                                  void *data,                                  pj_ssize_t *size){    size_t bytes;    clearerr((FILE*)fd);    bytes = fread(data, 1, *size, (FILE*)fd);    if (ferror((FILE*)fd)) {        *size = -1;        return PJ_RETURN_OS_ERROR(errno);    }    *size = bytes;    return PJ_SUCCESS;}PJ_DEF(pj_bool_t) pj_file_eof(pj_oshandle_t fd, enum pj_file_access access){    PJ_UNUSED_ARG(access);    return feof((FILE*)fd) ? PJ_TRUE : 0;}PJ_DEF(pj_status_t) pj_file_setpos( pj_oshandle_t fd,                                    pj_off_t offset,                                    enum pj_file_seek_type whence){    int mode;    switch (whence) {    case PJ_SEEK_SET:        mode = SEEK_SET; break;    case PJ_SEEK_CUR:        mode = SEEK_CUR; break;    case PJ_SEEK_END:        mode = SEEK_END; break;    default:        pj_assert(!"Invalid whence in file_setpos");        return PJ_EINVAL;    }    if (fseek((FILE*)fd, (long)offset, mode) != 0)        return PJ_RETURN_OS_ERROR(errno);    return PJ_SUCCESS;}PJ_DEF(pj_status_t) pj_file_getpos( pj_oshandle_t fd,                                    pj_off_t *pos){    long offset;    offset = ftell((FILE*)fd);    if (offset == -1) {        *pos = -1;        return PJ_RETURN_OS_ERROR(errno);    }    *pos = offset;    return PJ_SUCCESS;}PJ_DEF(pj_status_t) pj_file_flush(pj_oshandle_t fd){    int rc;    rc = fflush((FILE*)fd);    if (rc == EOF) {	return PJ_RETURN_OS_ERROR(errno);    }    return PJ_SUCCESS;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -