f69ea1f550
* Add helper program fstab-decode to make it easier to handle /etc/mtab content. Patch by Miloslav Trmac and Fedora. * Add fix for Debian bug #335023 - Make sure TERM is set on FreeBSD. * Add fix for Debian bug #374038 - Make it clear that shutdown -c can only cancel a waiting shutdown, not an active one. * Add not to pidof manual page about the use of readlink(2). Patch by Bill Nottingham and Fedora. * Add changes for Debian bug #68621 - Add PAM support for programs spawned by init on the console like sulogin. Based on patch by Topi Miettinen.
87 lines
1.9 KiB
C
87 lines
1.9 KiB
C
/* fstab-decode(8).
|
|
|
|
Copyright (c) 2006 Red Hat, Inc. All rights reserved.
|
|
|
|
This copyrighted material is made available to anyone wishing to use, modify,
|
|
copy, or redistribute it subject to the terms and conditions of the GNU General
|
|
Public License v.2.
|
|
|
|
This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along with
|
|
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
|
|
Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
Author: Miloslav Trmac <mitr@redhat.com> */
|
|
|
|
#include <errno.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
|
|
/* Decode the fstab-encoded string in place. */
|
|
static void
|
|
decode(char *s)
|
|
{
|
|
const char *src;
|
|
char *dest;
|
|
|
|
src = s;
|
|
dest = s;
|
|
while (*src != '\0') {
|
|
if (*src != '\\')
|
|
*dest = *src++;
|
|
else {
|
|
static const struct repl {
|
|
char orig[4];
|
|
size_t len;
|
|
char new;
|
|
} repls[] = {
|
|
#define R(X, Y) { X, sizeof(X) - 1, Y }
|
|
R("\\", '\\'),
|
|
R("011", '\t'),
|
|
R("012", '\n'),
|
|
R("040", ' '),
|
|
R("134", '\\')
|
|
#undef R
|
|
};
|
|
|
|
size_t i;
|
|
|
|
for (i = 0; i < sizeof (repls) / sizeof (repls[0]);
|
|
i++) {
|
|
if (memcmp(src + 1, repls[i].orig,
|
|
repls[i].len) == 0) {
|
|
*dest = repls[i].new;
|
|
src += 1 + repls[i].len;
|
|
goto found;
|
|
}
|
|
}
|
|
*dest = *src++;
|
|
found:
|
|
;
|
|
}
|
|
dest++;
|
|
}
|
|
*dest = '\0';
|
|
}
|
|
|
|
int
|
|
main (int argc, char *argv[])
|
|
{
|
|
size_t i;
|
|
|
|
if (argc < 2) {
|
|
fprintf(stderr, "Usage: fstab-decode command [arguments]\n");
|
|
return EXIT_FAILURE;
|
|
}
|
|
for (i = 2; i < (size_t)argc; i++)
|
|
decode(argv[i]);
|
|
execvp(argv[1], argv + 1);
|
|
fprintf(stderr, "fstab-decode: %s: %s\n", argv[1], strerror(errno));
|
|
return 127;
|
|
}
|