1 /*
2 Unix OS interface
3
4 Almost pure ANSI library, but we use bcopy rather than memcpy since
5 SunOS 4.1.1 is missing memcpy and most X11 platforms fake bcopy.
6 */
7
8 #include "os.h"
9
10 #include <ctype.h>
11 #include <stdio.h>
12
13 #if STDC_HEADERS
14 #include <stdlib.h>
15 #include <string.h>
16 #include <time.h>
17 #else
18 #if HAVE_MEMORY_H
19 #include <memory.h>
20 #endif
21 #if HAVE_STRINGS_H
22 #include <strings.h>
23 #endif
24 #if HAVE_TIME_H
25 #include <time.h>
26 #endif
27 #endif
28
29 #ifndef SEEK_SET
30 #define SEEK_SET 0
31 #endif
32 #ifndef SEEK_END
33 #define SEEK_END 2
34 #endif
35
os_open_read(const char * name)36 filep os_open_read(const char *name)
37 {
38 return (filep) fopen(name, "r");
39 }
40
os_wild_read(const char * name)41 filep os_wild_read(const char *name)
42 {
43 return os_open_read(name);
44 }
45
os_open_write(const char * name)46 filep os_open_write(const char *name)
47 {
48 return (filep) fopen(name, "w");
49 }
50
os_open_append(const char * name)51 filep os_open_append(const char *name)
52 {
53 filep res = (filep) fopen(name, "a");
54 return res ? res : os_open_write(name);
55 }
56
os_close(filep f)57 int os_close(filep f)
58 {
59 return fclose(f);
60 }
61
os_seek_fore(filep f,long_word off)62 int os_seek_fore(filep f, long_word off)
63 {
64 return fseek(f, off, SEEK_SET);
65 }
66
os_seek_back(filep f,long_word off)67 int os_seek_back(filep f, long_word off)
68 {
69 return fseek(f, off, SEEK_END);
70 }
71
os_read(void * buff,size_t size,int count,filep f)72 int os_read(void *buff, size_t size, int count, filep f)
73 {
74 return fread(buff, size, count, f);
75 }
76
os_write(void * buff,size_t size,int count,filep f)77 int os_write(void *buff, size_t size, int count, filep f)
78 {
79 return fwrite(buff, size, count, f);
80 }
81
os_exit(int e)82 void os_exit(int e)
83 {
84 exit(e);
85 }
86
os_mcpy(void * d,void * s,size_t n)87 void os_mcpy(void *d, void *s, size_t n)
88 {
89 #if HAVE_MEMCPY
90 memcpy(d, s, n);
91 #else
92 #if HAVE_BCOPY
93 bcopy(s, d, n);
94 #else
95 size_t i;
96 for(i = 0; i < n; ++i)
97 ((char *) d)[i] = ((char *) s)[i];
98 #endif
99 #endif
100 }
101
os_mset(char * p,size_t n,char v)102 void os_mset(char *p, size_t n, char v)
103 {
104 #if HAVE_MEMSET
105 memset(p, v, n);
106 #else
107 size_t i;
108 for(i = 0; i < n; ++i)
109 p[i] = v;
110 #endif
111 }
112
os_strcpy(char * d,const char * s)113 void os_strcpy(char *d, const char *s)
114 {
115 strcpy(d, s);
116 }
117
os_strcat(char * d,const char * s)118 void os_strcat(char *d, const char *s)
119 {
120 strcat(d, s);
121 }
122
os_strlen(const char * s)123 int os_strlen(const char *s)
124 {
125 return strlen(s);
126 }
127
os_strcmp(const char * s,const char * t)128 int os_strcmp(const char *s, const char *t)
129 {
130 return strcmp(s, t);
131 }
132
os_alloc(size_t n)133 void *os_alloc(size_t n)
134 {
135 return malloc(n);
136 }
137
os_free(void * p)138 void os_free(void *p)
139 {
140 free(p);
141 }
142
os_realloc(void * p,size_t n)143 void *os_realloc(void *p, size_t n)
144 {
145 return realloc(p, n);
146 }
147
os_lower(char c)148 char os_lower(char c)
149 {
150 return tolower(c);
151 }
152
os_time(void)153 long_word os_time(void)
154 {
155 return (long_word) time(0);
156 }
157
os_leaf(char * s)158 char *os_leaf(char *s)
159 {
160 return s;
161 }
162
os_patch_save(char * s)163 void os_patch_save(char *s)
164 {
165 }
166
os_strpos(char * s,char c)167 int os_strpos(char *s, char c)
168 {
169 #if HAVE_STRCHR
170 char *t = strchr(s, c);
171 return t ? t - s : -1;
172 #else
173 char *t = s;
174 while(*t && *t != c) ++t;
175 return *t == c ? t - s : -1;
176 #endif
177 }
178
179