fileio.c
上传用户:tany51
上传日期:2013-06-12
资源大小:1397k
文件大小:5k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*
  2.     Copyright (C) 2000  Marco Ziech (mmz@gmx.net)
  3.     Copyright (C) 2000  Ross Combs (rocombs@cs.nmsu.edu)
  4.     This program is free software; you can redistribute it and/or modify
  5.     it under the terms of the GNU General Public License as published by
  6.     the Free Software Foundation; either version 2 of the License, or
  7.     (at your option) any later version.
  8.     This program is distributed in the hope that it will be useful,
  9.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11.     GNU General Public License for more details.
  12.     You should have received a copy of the GNU General Public License
  13.     along with this program; if not, write to the Free Software
  14.     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  15. */
  16. #include "common/setup_before.h"
  17. #include <stdio.h>
  18. #ifdef STDC_HEADERS
  19. # include <stdlib.h>
  20. #else
  21. # ifdef HAVE_MALLOC_H
  22. #  include <malloc.h>
  23. # endif
  24. #endif
  25. #include "compat/uint.h"
  26. #include "fileio.h"
  27. #include "common/setup_after.h"
  28. typedef struct t_file {
  29. FILE *f;
  30. struct t_file *next;
  31. } t_file;
  32. static t_file *r_file = NULL;
  33. static t_file *w_file = NULL;
  34. /* ----------------------------------------------------------------- */
  35. extern void file_rpush(FILE *f) {
  36. t_file *tf = malloc(sizeof(t_file));
  37. tf->next = r_file;
  38. tf->f = f;
  39. r_file = tf;
  40. return;
  41. }
  42. extern void file_rpop(void) {
  43. t_file *tf;
  44. tf = r_file;
  45. r_file = tf->next;
  46. free(tf);
  47. return;
  48. }
  49. /* ----------------------------------------------------------------- */
  50. extern void file_wpush(FILE *f) {
  51. t_file *tf = malloc(sizeof(t_file));
  52. tf->next = w_file;
  53. tf->f = f;
  54. w_file = tf;
  55. return;
  56. }
  57. extern void file_wpop(void) {
  58. t_file *tf;
  59. tf = w_file;
  60. w_file = tf->next;
  61. free(tf);
  62. return;
  63. }
  64. /* ----------------------------------------------------------------- */
  65. extern t_uint8 file_readb(void) {
  66. unsigned char buff[1];
  67. if (fread(buff,1,sizeof(buff),r_file->f) < sizeof(buff)) {
  68. if (ferror(r_file->f)) perror("file_readb: fread");
  69. return 0;
  70. }
  71. return (((t_uint8)buff[0])    );
  72. }
  73. extern t_uint16 file_readw_le(void) {
  74. unsigned char buff[2];
  75. if (fread(buff,1,sizeof(buff),r_file->f) < sizeof(buff)) {
  76. if (ferror(r_file->f)) perror("file_readw_le: fread");
  77. return 0;
  78. }
  79. return (((t_uint16)buff[0])    )|
  80.                (((t_uint16)buff[1])<< 8);
  81. }
  82. extern t_uint16 file_readw_be(void) {
  83. unsigned char buff[2];
  84. if (fread(buff,1,sizeof(buff),r_file->f) < sizeof(buff)) {
  85. if (ferror(r_file->f)) perror("file_readw_be: fread");
  86. return 0;
  87. }
  88. return (((t_uint16)buff[0])<< 8)|
  89.                (((t_uint16)buff[1])    );
  90. }
  91. extern t_uint32 file_readd_le(void) {
  92. unsigned char buff[4];
  93. if (fread(buff,1,sizeof(buff),r_file->f) < sizeof(buff)) {
  94. if (ferror(r_file->f)) perror("file_readd_le: fread");
  95. return 0;
  96. }
  97. return (((t_uint32)buff[0])    )|
  98.                (((t_uint32)buff[1])<< 8)|
  99.                (((t_uint32)buff[2])<<16)|
  100.                (((t_uint32)buff[3])<<24);
  101. }
  102. extern t_uint32 file_readd_be(void) {
  103. unsigned char buff[4];
  104. if (fread(buff,1,sizeof(buff),r_file->f) < sizeof(buff)) {
  105. if (ferror(r_file->f)) perror("file_readd_be: fread");
  106. return 0;
  107. }
  108. return (((t_uint32)buff[0])<<24)|
  109.                (((t_uint32)buff[1])<<16)|
  110.                (((t_uint32)buff[2])<< 8)|
  111.                (((t_uint32)buff[3])    );
  112. }
  113. extern int file_writeb(t_uint8 u) {
  114. unsigned char buff[1];
  115. buff[0] = (u   );
  116. if (fwrite(buff,1,sizeof(buff),w_file->f) < sizeof(buff)) {
  117. if (ferror(w_file->f)) perror("file_writeb: fwrite");
  118. return -1;
  119. }
  120. return 0;
  121. }
  122. extern int file_writew_le(t_uint16 u) {
  123. unsigned char buff[2];
  124. buff[0] = (u    );
  125. buff[1] = (u>> 8);
  126. if (fwrite(buff,1,sizeof(buff),w_file->f) < sizeof(buff)) {
  127. if (ferror(w_file->f)) perror("file_writew_le: fwrite");
  128. return -1;
  129. }
  130. return 0;
  131. }
  132. extern int file_writew_be(t_uint16 u) {
  133. unsigned char buff[2];
  134. buff[0] = (u>> 8);
  135. buff[1] = (u    );
  136. if (fwrite(buff,1,sizeof(buff),w_file->f) < sizeof(buff)) {
  137. if (ferror(w_file->f)) perror("file_writew_be: fwrite");
  138. return -1;
  139. }
  140. return 0;
  141. }
  142. extern int file_writed_le(t_uint32 u) {
  143. unsigned char buff[4];
  144. buff[0] = (u    );
  145. buff[1] = (u>> 8);
  146. buff[2] = (u>>16);
  147. buff[3] = (u>>24);
  148. if (fwrite(buff,1,sizeof(buff),w_file->f) < sizeof(buff)) {
  149. if (ferror(w_file->f)) perror("file_writed_le: fwrite");
  150. return -1;
  151. }
  152. return 0;
  153. }
  154. extern int file_writed_be(t_uint32 u) {
  155. unsigned char buff[4];
  156. buff[0] = (u>>24);
  157. buff[1] = (u>>16);
  158. buff[2] = (u>> 8);
  159. buff[3] = (u    );
  160. if (fwrite(buff,1,sizeof(buff),w_file->f) < sizeof(buff)) {
  161. if (ferror(w_file->f)) perror("file_writed_be: fwrite");
  162. return -1;
  163. }
  164. return 0;
  165. }