Skip to content

Commit cfbd780

Browse files
committed
Replaces #defined LispStringToCString with static procedure, reformats code
1 parent afe4000 commit cfbd780

File tree

1 file changed

+50
-55
lines changed

1 file changed

+50
-55
lines changed

inc/locfile.h

Lines changed: 50 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include <limits.h> /* for NAME_MAX */
1313
#include <dirent.h> /* for MAXNAMLEN */
1414
#include "lispemul.h" /* for DLword */
15+
#include "commondefs.h" /* for error */
1516

1617
#define FDEV_PAGE_SIZE 512 /* 1 page == 512 byte */
1718

@@ -63,6 +64,10 @@
6364
else {return(NIL);}} while (0)
6465

6566

67+
#ifndef min
68+
#define min(a, b) (((a) <= (b))?(a):(b))
69+
#endif /* min */
70+
6671
/************************************************************************/
6772
/* */
6873
/* L i s p S t r i n g T o C S t r i n g */
@@ -78,58 +83,52 @@
7883
/* */
7984
/************************************************************************/
8085
#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+
}
107109
#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+
}
133132

134133
#endif /* BYTESWAP */
135134

@@ -181,10 +180,6 @@ do { \
181180
(cstringp) = (char *)(NativeAligned2FromLAddr(((OneDArray *)lf_naddress)->base)); \
182181
} while (0)
183182

184-
#ifndef min
185-
#define min(a, b) (((a) <= (b))?(a):(b))
186-
#endif /* min */
187-
188183
#define LispNumToCInt(Lisp) \
189184
( (((Lisp) & SEGMASK) == S_POSITIVE) ? ((Lisp) & 0xFFFF) : \
190185
(((Lisp) & SEGMASK) == S_NEGATIVE) ? ((Lisp) | 0xFFFF0000) : \

0 commit comments

Comments
 (0)