chiark
/
gitweb
/
~mdw
/
checkpath
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Use a dynamic string for reading symlinks.
[checkpath]
/
checkpath.c
diff --git
a/checkpath.c
b/checkpath.c
index 74eb24322b10ab529bb4a424d20aebbf429551b6..f470d498b2638c63451941b89d9a65fd9cdaef68 100644
(file)
--- a/
checkpath.c
+++ b/
checkpath.c
@@
-1,6
+1,6
@@
/* -*-c-*-
*
/* -*-c-*-
*
- * $Id: checkpath.c,v 1.
1 1999/04/06 20:12:07
mdw Exp $
+ * $Id: checkpath.c,v 1.
2 1999/05/18 20:49:12
mdw Exp $
*
* Check a path for safety
*
*
* Check a path for safety
*
@@
-29,8
+29,11
@@
/*----- Revision history --------------------------------------------------*
*
* $Log: checkpath.c,v $
/*----- Revision history --------------------------------------------------*
*
* $Log: checkpath.c,v $
- * Revision 1.1 1999/04/06 20:12:07 mdw
- * Initial revision
+ * Revision 1.2 1999/05/18 20:49:12 mdw
+ * Use a dynamic string for reading symlinks.
+ *
+ * Revision 1.1.1.1 1999/04/06 20:12:07 mdw
+ * Import new project.
*
*/
*
*/
@@
-418,18
+421,20
@@
int path_check(const char *p, struct chkpath *cp)
/* --- Handle symbolic links specially --- */
if (S_ISLNK(st.st_mode)) {
/* --- Handle symbolic links specially --- */
if (S_ISLNK(st.st_mode)) {
-
char buf[PATH_MAX]
;
+
dstr buf
;
int i;
/* --- Resolve the link --- */
int i;
/* --- Resolve the link --- */
- if ((i = readlink(d.buf, buf, sizeof(buf))) < 0) {
+ dstr_create(&buf);
+ dstr_ensure(&buf, st.st_size + 1);
+ if ((i = readlink(d.buf, buf.buf, buf.sz)) < 0) {
report(cp, CP_ERROR, 0, d.buf, "can't readlink: %e");
bad |= CP_ERROR;
break;
}
report(cp, CP_ERROR, 0, d.buf, "can't readlink: %e");
bad |= CP_ERROR;
break;
}
- buf[i] = 0;
- report(cp, CP_SYMLINK, 2, d.buf, "symlink -> `%s'", buf);
+ buf
.buf
[i] = 0;
+ report(cp, CP_SYMLINK, 2, d.buf, "symlink -> `%s'", buf
.buf
);
/* --- Handle sticky parents --- *
*
/* --- Handle sticky parents --- *
*
@@
-448,11
+453,12
@@
int path_check(const char *p, struct chkpath *cp)
/* --- Sort out what to do from here --- */
/* --- Sort out what to do from here --- */
- if (buf[0] == '/')
+ if (buf
.buf
[0] == '/')
popall();
else
pop();
popall();
else
pop();
- ee = splitpath(buf, ee);
+ ee = splitpath(buf.buf, ee);
+ dstr_destroy(&buf);
continue;
}
continue;
}