|
12 | 12 | #include <limits.h> /* for NAME_MAX */ |
13 | 13 | #include <dirent.h> /* for MAXNAMLEN */ |
14 | 14 | #include "lispemul.h" /* for DLword */ |
| 15 | +#include "commondefs.h" /* for error */ |
15 | 16 |
|
16 | 17 | #define FDEV_PAGE_SIZE 512 /* 1 page == 512 byte */ |
17 | 18 |
|
|
63 | 64 | else {return(NIL);}} while (0) |
64 | 65 |
|
65 | 66 |
|
| 67 | +#ifndef min |
| 68 | +#define min(a, b) (((a) <= (b))?(a):(b)) |
| 69 | +#endif /* min */ |
| 70 | + |
66 | 71 | /************************************************************************/ |
67 | 72 | /* */ |
68 | 73 | /* L i s p S t r i n g T o C S t r i n g */ |
|
78 | 83 | /* */ |
79 | 84 | /************************************************************************/ |
80 | 85 | #ifndef BYTESWAP |
81 | | -#define LispStringToCString(Lisp, C, MaxLen) \ |
82 | | - do { \ |
83 | | - OneDArray *lf_arrayp; \ |
84 | | - char *lf_base, *lf_dp; \ |
85 | | - short *lf_sbase; \ |
86 | | - size_t lf_length; \ |
87 | | - lf_arrayp = (OneDArray *)NativeAligned4FromLAddr(Lisp); \ |
88 | | - lf_length = min(MaxLen - 1, lf_arrayp->fillpointer); \ |
89 | | - lf_dp = (C); \ |
90 | | - switch (lf_arrayp->typenumber) { \ |
91 | | - case THIN_CHAR_TYPENUMBER: \ |
92 | | - lf_base = \ |
93 | | - ((char *)(NativeAligned2FromLAddr(lf_arrayp->base))) + ((int)(lf_arrayp->offset)); \ |
94 | | - strncpy(lf_dp, lf_base, lf_length); \ |
95 | | - lf_dp[lf_length] = '\0'; \ |
96 | | - break; \ |
97 | | - \ |
98 | | - case FAT_CHAR_TYPENUMBER: \ |
99 | | - lf_sbase = \ |
100 | | - ((short *)(NativeAligned2FromLAddr(lf_arrayp->base))) + ((int)(lf_arrayp->offset)); \ |
101 | | - for (size_t lf_i = 0; lf_i < (lf_length); lf_i++) *lf_dp++ = (char)(*lf_sbase++); \ |
102 | | - *lf_dp = '\0'; \ |
103 | | - break; \ |
104 | | - default: error("LispStringToCString: Not a character array.\n"); \ |
105 | | - } \ |
106 | | - } while (0) |
| 86 | +static void LispStringToCString(LispPTR Lisp, char *C, size_t MaxLen) { |
| 87 | + OneDArray *lf_arrayp; |
| 88 | + char *lf_base, *lf_dp; |
| 89 | + short *lf_sbase; |
| 90 | + size_t lf_length; |
| 91 | + lf_arrayp = (OneDArray *)NativeAligned4FromLAddr(Lisp); |
| 92 | + lf_length = min(MaxLen - 1, lf_arrayp->fillpointer); |
| 93 | + lf_dp = (C); |
| 94 | + switch (lf_arrayp->typenumber) { |
| 95 | + case THIN_CHAR_TYPENUMBER: |
| 96 | + lf_base = ((char *)(NativeAligned2FromLAddr(lf_arrayp->base))) + ((int)(lf_arrayp->offset)); |
| 97 | + strncpy(lf_dp, lf_base, lf_length); |
| 98 | + lf_dp[lf_length] = '\0'; |
| 99 | + break; |
| 100 | + |
| 101 | + case FAT_CHAR_TYPENUMBER: |
| 102 | + lf_sbase = ((short *)(NativeAligned2FromLAddr(lf_arrayp->base))) + ((int)(lf_arrayp->offset)); |
| 103 | + for (size_t lf_i = 0; lf_i < (lf_length); lf_i++) *lf_dp++ = (char)(*lf_sbase++); |
| 104 | + *lf_dp = '\0'; |
| 105 | + break; |
| 106 | + default: error("LispStringToCString: Not a character array.\n"); |
| 107 | + } |
| 108 | +} |
107 | 109 | #else /* BYTESWAP == T CHANGED-BY-TAKE */ |
108 | | -#define LispStringToCString(Lisp, C, MaxLen) \ |
109 | | - do { \ |
110 | | - OneDArray *lf_arrayp; \ |
111 | | - char *lf_base, *lf_dp; \ |
112 | | - short *lf_sbase; \ |
113 | | - size_t lf_length; \ |
114 | | - lf_arrayp = (OneDArray *)(NativeAligned4FromLAddr(Lisp)); \ |
115 | | - lf_length = min(MaxLen - 1, lf_arrayp->fillpointer); \ |
116 | | - lf_dp = (C); \ |
117 | | - switch (lf_arrayp->typenumber) { \ |
118 | | - case THIN_CHAR_TYPENUMBER: \ |
119 | | - lf_base = \ |
120 | | - ((char *)(NativeAligned2FromLAddr(lf_arrayp->base))) + ((int)(lf_arrayp->offset)); \ |
121 | | - for (size_t lf_i = 0; lf_i < lf_length; lf_i++) *lf_dp++ = GETBYTE(lf_base++); \ |
122 | | - break; \ |
123 | | - \ |
124 | | - case FAT_CHAR_TYPENUMBER: \ |
125 | | - lf_sbase = \ |
126 | | - ((short *)(NativeAligned2FromLAddr(lf_arrayp->base))) + ((int)(lf_arrayp->offset)); \ |
127 | | - for (size_t lf_ii = 0; lf_ii < lf_length; lf_ii++) *lf_dp++ = (char)(GETWORD(lf_sbase++)); \ |
128 | | - break; \ |
129 | | - default: error("LispStringToCString: Not a character array.\n"); \ |
130 | | - } \ |
131 | | - *lf_dp = '\0'; \ |
132 | | - } while (0) |
| 110 | +static void LispStringToCString(LispPTR Lisp, char *C, size_t MaxLen) { |
| 111 | + OneDArray *lf_arrayp; |
| 112 | + char *lf_base, *lf_dp; |
| 113 | + short *lf_sbase; |
| 114 | + size_t lf_length; |
| 115 | + lf_arrayp = (OneDArray *)(NativeAligned4FromLAddr(Lisp)); |
| 116 | + lf_length = min(MaxLen - 1, lf_arrayp->fillpointer); |
| 117 | + lf_dp = (C); |
| 118 | + switch (lf_arrayp->typenumber) { |
| 119 | + case THIN_CHAR_TYPENUMBER: |
| 120 | + lf_base = ((char *)(NativeAligned2FromLAddr(lf_arrayp->base))) + ((int)(lf_arrayp->offset)); |
| 121 | + for (size_t lf_i = 0; lf_i < lf_length; lf_i++) *lf_dp++ = GETBYTE(lf_base++); |
| 122 | + break; |
| 123 | + |
| 124 | + case FAT_CHAR_TYPENUMBER: |
| 125 | + lf_sbase = ((short *)(NativeAligned2FromLAddr(lf_arrayp->base))) + ((int)(lf_arrayp->offset)); |
| 126 | + for (size_t lf_ii = 0; lf_ii < lf_length; lf_ii++) *lf_dp++ = (char)(GETWORD(lf_sbase++)); |
| 127 | + break; |
| 128 | + default: error("LispStringToCString: Not a character array.\n"); |
| 129 | + } |
| 130 | + *lf_dp = '\0'; |
| 131 | +} |
133 | 132 |
|
134 | 133 | #endif /* BYTESWAP */ |
135 | 134 |
|
@@ -181,10 +180,6 @@ do { \ |
181 | 180 | (cstringp) = (char *)(NativeAligned2FromLAddr(((OneDArray *)lf_naddress)->base)); \ |
182 | 181 | } while (0) |
183 | 182 |
|
184 | | -#ifndef min |
185 | | -#define min(a, b) (((a) <= (b))?(a):(b)) |
186 | | -#endif /* min */ |
187 | | - |
188 | 183 | #define LispNumToCInt(Lisp) \ |
189 | 184 | ( (((Lisp) & SEGMASK) == S_POSITIVE) ? ((Lisp) & 0xFFFF) : \ |
190 | 185 | (((Lisp) & SEGMASK) == S_NEGATIVE) ? ((Lisp) | 0xFFFF0000) : \ |
|
0 commit comments