]> git.saurik.com Git - apple/security.git/blob - Security/libsecurity_ssl/sslViewer/fileIo.c
Security-57031.40.6.tar.gz
[apple/security.git] / Security / libsecurity_ssl / sslViewer / fileIo.c
1 /*
2 * Copyright (c) 2001-2003,2006-2012,2014 Apple Inc. All Rights Reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24 /*
25 * fileIo.c - simple file read/write utilities
26 */
27
28 #include <unistd.h>
29 #include <fcntl.h>
30 #include <errno.h>
31 #include <stdio.h>
32 #include <stdlib.h>
33 #include <sys/types.h>
34 #include <sys/stat.h>
35 #include "fileIo.h"
36
37 int writeFile(
38 const char *fileName,
39 const unsigned char *bytes,
40 unsigned numBytes)
41 {
42 int rtn;
43 int fd;
44
45 fd = open(fileName, O_RDWR | O_CREAT | O_TRUNC, 0600);
46 if(fd < 0) {
47 return errno;
48 }
49 rtn = lseek(fd, 0, SEEK_SET);
50 if(rtn < 0) {
51 return errno;
52 }
53 rtn = write(fd, bytes, (size_t)numBytes);
54 if(rtn != (int)numBytes) {
55 if(rtn >= 0) {
56 printf("writeFile: short write\n");
57 }
58 rtn = EIO;
59 }
60 else {
61 rtn = 0;
62 }
63 close(fd);
64 return rtn;
65 }
66
67 /*
68 * Read entire file.
69 */
70 int readFile(
71 const char *fileName,
72 unsigned char **bytes, // mallocd and returned
73 unsigned *numBytes) // returned
74 {
75 int rtn;
76 int fd;
77 unsigned char *buf;
78 struct stat sb;
79 unsigned size;
80
81 *numBytes = 0;
82 *bytes = NULL;
83 fd = open(fileName, O_RDONLY, 0);
84 if(fd < 0) {
85 return errno;
86 }
87 rtn = fstat(fd, &sb);
88 if(rtn) {
89 goto errOut;
90 }
91 size = sb.st_size;
92 buf = malloc(size);
93 if(buf == NULL) {
94 rtn = ENOMEM;
95 goto errOut;
96 }
97 rtn = lseek(fd, 0, SEEK_SET);
98 if(rtn < 0) {
99 goto errOut;
100 }
101 rtn = read(fd, buf, (size_t)size);
102 if(rtn != (int)size) {
103 if(rtn >= 0) {
104 printf("readFile: short read\n");
105 }
106 rtn = EIO;
107 }
108 else {
109 rtn = 0;
110 *bytes = buf;
111 *numBytes = size;
112 }
113 errOut:
114 close(fd);
115 return rtn;
116 }