diff options
author | Bruce Korb <korbb@gcc.gnu.org> | 2000-08-04 14:16:57 +0000 |
---|---|---|
committer | Bruce Korb <korbb@gcc.gnu.org> | 2000-08-04 14:16:57 +0000 |
commit | 62a99405cf2a861aa91ec0979021fa571046c8f8 (patch) | |
tree | 1fd7f6c98ea1e81d067d68a49ff93779db1b0d34 /gcc/fixinc/fixlib.c | |
parent | d677797245ad1aae20e79912bead56d9103a28c5 (diff) | |
download | gcc-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.c | 54 |
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 |