You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							129 lines
						
					
					
						
							3.5 KiB
						
					
					
				
			
		
		
	
	
							129 lines
						
					
					
						
							3.5 KiB
						
					
					
				| # --- SDE-COPYRIGHT-NOTE-BEGIN --- | |
| # This copyright note is auto-generated by ./scripts/Create-CopyPatch. | |
| # | |
| # Filename: 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. | |
| # --- SDE-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 <[email protected]> | |
|  | |
| --- 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 <[email protected]> | |
|  | |
| --- 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 <[email protected]> | |
|  | |
| --- 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 };
 | |
| 
 |