first ever correct use of strncpy
This commit is contained in:
		
							parent
							
								
									aa6824ab64
								
							
						
					
					
						commit
						766ba5cc06
					
				
					 3 changed files with 17 additions and 24 deletions
				
			
		
							
								
								
									
										1
									
								
								defs.h
									
										
									
									
									
								
							
							
						
						
									
										1
									
								
								defs.h
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -127,6 +127,7 @@ void*           memset(void*, int, uint);
 | 
			
		|||
char*           safestrcpy(char*, const char*, int);
 | 
			
		||||
int             strlen(const char*);
 | 
			
		||||
int             strncmp(const char*, const char*, uint);
 | 
			
		||||
char*           strncpy(char*, const char*, int);
 | 
			
		||||
 | 
			
		||||
// syscall.c
 | 
			
		||||
int             argint(int, int*);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										24
									
								
								fs.c
									
										
									
									
									
								
							
							
						
						
									
										24
									
								
								fs.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -455,15 +455,7 @@ writei(struct inode *ip, char *src, uint off, uint n)
 | 
			
		|||
int
 | 
			
		||||
namecmp(const char *s, const char *t)
 | 
			
		||||
{
 | 
			
		||||
  int i;
 | 
			
		||||
  
 | 
			
		||||
  for(i=0; i<DIRSIZ; i++){
 | 
			
		||||
    if(s[i] != t[i])
 | 
			
		||||
      return s[i] - t[i];
 | 
			
		||||
    if(s[i] == 0)
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
  return 0;
 | 
			
		||||
  return strncmp(s, t, DIRSIZ);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Look for a directory entry in a directory.
 | 
			
		||||
| 
						 | 
				
			
			@ -500,18 +492,6 @@ dirlookup(struct inode *dp, char *name, uint *poff)
 | 
			
		|||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Copy one name to another.
 | 
			
		||||
static void
 | 
			
		||||
namecpy(char *s, const char *t)
 | 
			
		||||
{
 | 
			
		||||
  int i;
 | 
			
		||||
  
 | 
			
		||||
  for(i=0; i<DIRSIZ && t[i]; i++)
 | 
			
		||||
    s[i] = t[i];
 | 
			
		||||
  for(; i<DIRSIZ; i++)
 | 
			
		||||
    s[i] = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Write a new directory entry (name, ino) into the directory dp.
 | 
			
		||||
int
 | 
			
		||||
dirlink(struct inode *dp, char *name, uint ino)
 | 
			
		||||
| 
						 | 
				
			
			@ -534,7 +514,7 @@ dirlink(struct inode *dp, char *name, uint ino)
 | 
			
		|||
      break;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  namecpy(de.name, name);
 | 
			
		||||
  strncpy(de.name, name, DIRSIZ);
 | 
			
		||||
  de.inum = ino;
 | 
			
		||||
  if(writei(dp, (char*)&de, off, sizeof(de)) != sizeof(de))
 | 
			
		||||
    panic("dirwrite");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										16
									
								
								string.c
									
										
									
									
									
								
							
							
						
						
									
										16
									
								
								string.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -56,8 +56,20 @@ strncmp(const char *p, const char *q, uint n)
 | 
			
		|||
    n--, p++, q++;
 | 
			
		||||
  if(n == 0)
 | 
			
		||||
    return 0;
 | 
			
		||||
  else
 | 
			
		||||
    return (int) ((uchar) *p - (uchar) *q);
 | 
			
		||||
  return (uchar)*p - (uchar)*q;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char*
 | 
			
		||||
strncpy(char *s, const char *t, int n)
 | 
			
		||||
{
 | 
			
		||||
  char *os;
 | 
			
		||||
  
 | 
			
		||||
  os = s;
 | 
			
		||||
  while(n-- > 0 && (*s++ = *t++) != 0)
 | 
			
		||||
    ;
 | 
			
		||||
  while(n-- > 0)
 | 
			
		||||
    *s++ = 0;
 | 
			
		||||
  return os;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Like strncpy but guaranteed to NUL-terminate.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue