Skip to content
Snippets Groups Projects
Commit 766ba5cc authored by rsc's avatar rsc
Browse files

first ever correct use of strncpy

parent aa6824ab
No related branches found
No related tags found
No related merge requests found
...@@ -127,6 +127,7 @@ void* memset(void*, int, uint); ...@@ -127,6 +127,7 @@ void* memset(void*, int, uint);
char* safestrcpy(char*, const char*, int); char* safestrcpy(char*, const char*, int);
int strlen(const char*); int strlen(const char*);
int strncmp(const char*, const char*, uint); int strncmp(const char*, const char*, uint);
char* strncpy(char*, const char*, int);
// syscall.c // syscall.c
int argint(int, int*); int argint(int, int*);
......
...@@ -455,15 +455,7 @@ writei(struct inode *ip, char *src, uint off, uint n) ...@@ -455,15 +455,7 @@ writei(struct inode *ip, char *src, uint off, uint n)
int int
namecmp(const char *s, const char *t) namecmp(const char *s, const char *t)
{ {
int i; return strncmp(s, t, DIRSIZ);
for(i=0; i<DIRSIZ; i++){
if(s[i] != t[i])
return s[i] - t[i];
if(s[i] == 0)
break;
}
return 0;
} }
// Look for a directory entry in a directory. // Look for a directory entry in a directory.
...@@ -500,18 +492,6 @@ dirlookup(struct inode *dp, char *name, uint *poff) ...@@ -500,18 +492,6 @@ dirlookup(struct inode *dp, char *name, uint *poff)
return 0; 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. // Write a new directory entry (name, ino) into the directory dp.
int int
dirlink(struct inode *dp, char *name, uint ino) dirlink(struct inode *dp, char *name, uint ino)
...@@ -534,7 +514,7 @@ dirlink(struct inode *dp, char *name, uint ino) ...@@ -534,7 +514,7 @@ dirlink(struct inode *dp, char *name, uint ino)
break; break;
} }
namecpy(de.name, name); strncpy(de.name, name, DIRSIZ);
de.inum = ino; de.inum = ino;
if(writei(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) if(writei(dp, (char*)&de, off, sizeof(de)) != sizeof(de))
panic("dirwrite"); panic("dirwrite");
......
...@@ -56,8 +56,20 @@ strncmp(const char *p, const char *q, uint n) ...@@ -56,8 +56,20 @@ strncmp(const char *p, const char *q, uint n)
n--, p++, q++; n--, p++, q++;
if(n == 0) if(n == 0)
return 0; return 0;
else return (uchar)*p - (uchar)*q;
return (int) ((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. // Like strncpy but guaranteed to NUL-terminate.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment