aboutsummaryrefslogtreecommitdiff
path: root/gcc/fixinc/fixlib.c
diff options
context:
space:
mode:
authorBruce Korb <korbb@gcc.gnu.org>2000-08-04 14:16:57 +0000
committerBruce Korb <korbb@gcc.gnu.org>2000-08-04 14:16:57 +0000
commit62a99405cf2a861aa91ec0979021fa571046c8f8 (patch)
tree1fd7f6c98ea1e81d067d68a49ff93779db1b0d34 /gcc/fixinc/fixlib.c
parentd677797245ad1aae20e79912bead56d9103a28c5 (diff)
downloadgcc-62a99405cf2a861aa91ec0979021fa571046c8f8.zip
gcc-62a99405cf2a861aa91ec0979021fa571046c8f8.tar.gz
gcc-62a99405cf2a861aa91ec0979021fa571046c8f8.tar.bz2
Implement, but leave disabled, MSDOS functionality
From-SVN: r35479
Diffstat (limited to 'gcc/fixinc/fixlib.c')
-rw-r--r--gcc/fixinc/fixlib.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/gcc/fixinc/fixlib.c b/gcc/fixinc/fixlib.c
index c2c77eb..1b134ee 100644
--- a/gcc/fixinc/fixlib.c
+++ b/gcc/fixinc/fixlib.c
@@ -245,3 +245,57 @@ mn_get_regexps( label_re, name_re, who )
*name_re = &mn_name_re;
}
#endif
+
+
+#ifdef __MSDOS__
+
+char*
+make_raw_shell_str( pz_d, pz_s, smax )
+ char* pz_d;
+ tCC* pz_s;
+ size_t smax;
+{
+ tSCC zQ[] = "'\\''";
+ size_t dtaSize;
+ char* pz_d_start = pz_d;
+
+ smax--; /* adjust for trailing NUL */
+
+ dtaSize = strlen( pz_s ) + 3;
+
+ {
+ const char* pz = pz_s - 1;
+
+ for (;;) {
+ pz = strchr( pz+1, '\'' );
+ if (pz == (char*)NULL)
+ break;
+ dtaSize += sizeof( zQ )-1;
+ }
+ }
+ if (dtaSize > smax)
+ return (char*)NULL;
+
+ *(pz_d++) = '\'';
+
+ for (;;) {
+ if (pz_d - pz_d_start >= smax)
+ return (char*)NULL;
+ switch (*(pz_d++) = *(pz_s++)) {
+ case NUL:
+ goto loopDone;
+
+ case '\'':
+ if (pz_d - pz_d_start >= smax - sizeof( zQ )-1)
+ return (char*)NULL;
+ strcpy( pz_d-1, zQ );
+ pz_d += sizeof( zQ )-2;
+ }
+ } loopDone:;
+ pz_d[-1] = '\'';
+ *pz_d = NUL;
+
+ return pz_d;
+}
+
+#endif