Skip to content

Commit 88dea29

Browse files
committed
Replaces LispStringToCString macro with static inline procedure
1 parent feac148 commit 88dea29

File tree

1 file changed

+62
-62
lines changed

1 file changed

+62
-62
lines changed

inc/locfile.h

Lines changed: 62 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <sys/param.h> /* for MAXPATHLEN */
1616
#include <dirent.h> /* for MAXNAMLEN */
1717
#include "lispemul.h" /* for DLword */
18+
#include "commondefs.h" /* for error */
1819

1920
#define FDEV_PAGE_SIZE 512 /* 1 page == 512 byte */
2021

@@ -66,6 +67,9 @@
6667
else if(((ptr) & SEGMASK)== S_NEGATIVE) {(place) = (int)((ptr)| 0xffff0000);}\
6768
else {return(NIL);}} while (0)
6869

70+
#ifndef min
71+
#define min(a, b) (((a) <= (b))?(a):(b))
72+
#endif /* min */
6973

7074
/************************************************************************/
7175
/* */
@@ -82,65 +86,65 @@
8286
/* */
8387
/************************************************************************/
8488
#ifndef BYTESWAP
85-
#define LispStringToCString(Lisp, C, MaxLen) \
86-
do { \
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, lf_arrayp->fillpointer); \
93-
switch(lf_arrayp->typenumber) \
94-
{ \
95-
case THIN_CHAR_TYPENUMBER: \
96-
lf_base = ((char *)(NativeAligned2FromLAddr(lf_arrayp->base))) \
97-
+ ((int)(lf_arrayp->offset)); \
98-
strncpy(C, lf_base, lf_length); \
99-
(C)[lf_length] = '\0'; \
100-
break; \
101-
\
102-
case FAT_CHAR_TYPENUMBER: \
103-
lf_sbase = ((short *)(NativeAligned2FromLAddr(lf_arrayp->base))) \
104-
+ ((int)(lf_arrayp->offset)); \
105-
lf_dp = C; \
106-
for(size_t lf_i=0;lf_i<(lf_length);lf_i++) \
107-
*lf_dp++ = (char)(*lf_sbase++); \
108-
*lf_dp = '\0'; \
109-
break; \
110-
default: \
111-
error("LispStringToCString: Not a character array.\n"); \
112-
} \
113-
} while (0)
89+
static inline void LispStringToCString(LispPTR Lisp, char *C, size_t MaxLen)
90+
{
91+
OneDArray *lf_arrayp;
92+
char *lf_base, *lf_dp;
93+
short *lf_sbase;
94+
size_t lf_length;
95+
lf_arrayp = (OneDArray *)NativeAligned4FromLAddr(Lisp);
96+
lf_length = min(MaxLen, lf_arrayp->fillpointer);
97+
switch(lf_arrayp->typenumber)
98+
{
99+
case THIN_CHAR_TYPENUMBER:
100+
lf_base = ((char *)(NativeAligned2FromLAddr(lf_arrayp->base)))
101+
+ ((int)(lf_arrayp->offset));
102+
strncpy(C, lf_base, lf_length);
103+
(C)[lf_length] = '\0';
104+
break;
105+
106+
case FAT_CHAR_TYPENUMBER:
107+
lf_sbase = ((short *)(NativeAligned2FromLAddr(lf_arrayp->base)))
108+
+ ((int)(lf_arrayp->offset));
109+
lf_dp = C;
110+
for(size_t lf_i=0;lf_i<(lf_length);lf_i++)
111+
*lf_dp++ = (char)(*lf_sbase++);
112+
*lf_dp = '\0';
113+
break;
114+
default:
115+
error("LispStringToCString: Not a character array.\n");
116+
}
117+
}
114118
#else /* BYTESWAP == T CHANGED-BY-TAKE */
115-
#define LispStringToCString(Lisp, C, MaxLen) \
116-
do { \
117-
OneDArray *lf_arrayp; \
118-
char *lf_base, *lf_dp; \
119-
short *lf_sbase; \
120-
size_t lf_length; \
121-
lf_arrayp = (OneDArray *)(NativeAligned4FromLAddr(Lisp)); \
122-
lf_length = min(MaxLen, lf_arrayp->fillpointer); \
123-
switch(lf_arrayp->typenumber) \
124-
{ \
125-
case THIN_CHAR_TYPENUMBER: \
126-
lf_base = ((char *)(NativeAligned2FromLAddr(lf_arrayp->base))) \
127-
+ ((int)(lf_arrayp->offset)); \
128-
StrNCpyFromLispToC(C , lf_base , lf_length ); \
129-
(C)[lf_length] = '\0'; \
130-
break; \
131-
\
132-
case FAT_CHAR_TYPENUMBER: \
133-
lf_sbase = ((short *)(NativeAligned2FromLAddr(lf_arrayp->base))) \
134-
+ ((int)(lf_arrayp->offset)); \
135-
lf_dp = C; \
136-
for(size_t lf_ii=0;lf_ii<(lf_length);lf_ii++,lf_sbase++) \
137-
*lf_dp++ = (char)(GETWORD(lf_sbase)); \
138-
*lf_dp = '\0'; \
139-
break; \
140-
default: \
141-
error("LispStringToCString: Not a character array.\n"); \
142-
} \
143-
} while (0)
119+
static inline void LispStringToCString(LispPTR Lisp, char *C, size_t MaxLen)
120+
{
121+
OneDArray *lf_arrayp;
122+
char *lf_base, *lf_dp;
123+
short *lf_sbase;
124+
size_t lf_length;
125+
lf_arrayp = (OneDArray *)(NativeAligned4FromLAddr(Lisp));
126+
lf_length = min(MaxLen, lf_arrayp->fillpointer);
127+
switch(lf_arrayp->typenumber)
128+
{
129+
case THIN_CHAR_TYPENUMBER:
130+
lf_base = ((char *)(NativeAligned2FromLAddr(lf_arrayp->base)))
131+
+ ((int)(lf_arrayp->offset));
132+
StrNCpyFromLispToC(C , lf_base , lf_length );
133+
(C)[lf_length] = '\0';
134+
break;
135+
136+
case FAT_CHAR_TYPENUMBER:
137+
lf_sbase = ((short *)(NativeAligned2FromLAddr(lf_arrayp->base)))
138+
+ ((int)(lf_arrayp->offset));
139+
lf_dp = C;
140+
for(size_t lf_ii=0;lf_ii<(lf_length);lf_ii++,lf_sbase++)
141+
*lf_dp++ = (char)(GETWORD(lf_sbase));
142+
*lf_dp = '\0';
143+
break;
144+
default:
145+
error("LispStringToCString: Not a character array.\n");
146+
}
147+
}
144148

145149
#endif /* BYTESWAP */
146150

@@ -192,10 +196,6 @@ do { \
192196
(cstringp) = (char *)(NativeAligned2FromLAddr(((OneDArray *)lf_naddress)->base)); \
193197
} while (0)
194198

195-
#ifndef min
196-
#define min(a, b) (((a) <= (b))?(a):(b))
197-
#endif /* min */
198-
199199
#define LispNumToCInt(Lisp) \
200200
( (((Lisp) & SEGMASK) == S_POSITIVE) ? ((Lisp) & 0xFFFF) : \
201201
(((Lisp) & SEGMASK) == S_NEGATIVE) ? ((Lisp) | 0xFFFF0000) : \

0 commit comments

Comments
 (0)