|
|
# --- T2-COPYRIGHT-NOTE-BEGIN --- # This copyright note is auto-generated by ./scripts/Create-CopyPatch. # # T2 SDE: package/.../embutils/mount.patch # Copyright (C) 2004 - 2006 The T2 SDE Project # # More information can be found in the files COPYING and README. # # This patch file is dual-licensed. It is available under the license the # patched project is licensed under, as long as it is an OpenSource license # as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms # of the GNU General Public License as published by the Free Software # Foundation; either version 2 of the License, or (at your option) any later # version. # --- T2-COPYRIGHT-NOTE-END ---
Hardened mount to not crash when the directory was not found in /etc/fstab and improved the tokenizing to strip white spaces, since the files are often indented in tabular form.
- Rene Rebe <rene@exactcode.de>
--- embutils-0.17/mount.c 2004-01-09 17:03:48.000000000 +0100
+++ embutils-0.17-fixed/mount.c 2005-02-09 12:34:56.222517672 +0100
@@ -142,12 +142,20 @@
* isn't really portable */ -/* tokenizes the string when a space appears (not thread safe) */
+/* tokenizes the string when a space appears and strip leading ones
+ (not thread safe) */
static char *spacetok(char *s) { static char *buffer=NULL; + char *tmp;
+
if(s) buffer=s; - char *tmp=buffer;
+
+ /* skip leading spaces */
+ while(*buffer && isspace(*buffer))
+ ++buffer;
+
+ tmp=buffer;
for(;*buffer;++buffer) { if(isspace(*buffer)) { *buffer++=0; @@ -463,13 +470,18 @@
if(fh) { struct mntentry *mnt; while((mnt=mnt_entry(fh))) - if(!strcmp(mnt->dir,device)) {
+ if(mnt->dir && !strcmp(mnt->dir,device)) {
device=mnt->device; dir=mnt->dir; fs_type=mnt->fs_type; parse_options(mnt->opts,&flags,data+data_size,DATA_BUFFER_SIZE-data_size); break; } + if (!dir) {
+ __write2(device);
+ write(2," no found in /etc/fstab\n",24);
+ return 1;
+ }
} #ifdef CLEANUP io_close(fh);
Added bind mount and fixed the option_parser to be able to parse options with only one part and no , seperator ...
Rene Rebe <rene@exactcode.de>
--- embutils-0.17/mount.c 2004-01-09 17:03:48.000000000 +0100
+++ embutils-0.17-mount/mount.c 2005-06-19 15:13:34.000000000 +0200
@@ -26,6 +26,7 @@
#ifdef LINUX #include <sys/mount.h> #include <paths.h> +#include <linux/fs.h> /* MS_MOVE */
#ifdef _PATH_MOUNTED const char *const mtab=_PATH_MOUNTED; #else @@ -227,6 +228,9 @@
{"suid", ~MS_NOSUID, 0}, {"sync", ~0, MS_SYNCHRONOUS}, {"bind", ~0, MS_BIND}, +#ifdef LINUX
+ {"move", ~0, MS_MOVE},
+#endif
{0, 0, 0} }; /* @@ -240,10 +244,15 @@
size_t data_set=0; for(;;) { const struct mount_options *i; - char *ptr=strchr(str,',');
- if(!ptr)
+ char *ptr;
+
+ if (!str || !*str)
break; - *ptr=0;
+
+ ptr=strchr(str,',');
+ if(!ptr) ptr=(char*)str+strlen(str)-1;
+ else *ptr=0;
+
for(i=options; i->name; ++i) if(!strcmp(str,i->name)) { *flags&=i->and;
Do not segfault by default when no type was give, also none might be needed due bind or move mounts.
- Rene Rebe <rene@exactcode.de>
--- embutils-0.17/mount.c 2005-12-18 23:49:12.000000000 +0100
+++ embutils-0.17-patched/mount.c 2005-12-19 10:02:38.000000000 +0100
@@ -414,7 +414,7 @@
int main(int argc, char **argv) { unsigned long flags=0; - const char *fs_type=NULL;
+ const char *fs_type="";
const char *device=NULL; const char *dir=NULL; enum { DATA_BUFFER_SIZE=100 };
|