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