#ifdef HAVE_DIRECT_H
#include <direct.h>
#endif
-#ifdef AFS_DARWIN_ENV
-#include <sys/malloc.h>
-#else
-#include <malloc.h>
-#endif
#include <hcrypto/md5.h>
#ifdef AFS_PTHREAD_ENV
#include <assert.h>
static int ScanFid(char *, struct AFSFid *);
static afs_int32 GetVenusFidByFid(char *, char *, int, struct afscp_venusfid **);
static afs_int32 GetVenusFidByPath(char *, char *, struct afscp_venusfid **);
-static int BreakUpPath(char *, char *, char *);
+static int BreakUpPath(char *, char *, char *, size_t);
static char pnp[AFSPATHMAX]; /* filename of this program when called */
static int verbose = 0; /* Set if -verbose option given */
int
main(int argc, char **argv)
{
- afs_int32 code = 0;
struct cmd_syndesc *ts;
char baseName[AFSNAMEMAX];
/* try to get only the base name of this executable for use in logs */
- if (BreakUpPath(argv[0], NULL, baseName) > 0)
+ if (BreakUpPath(argv[0], NULL, baseName, AFSNAMEMAX) > 0)
strlcpy(pnp, baseName, AFSNAMEMAX);
else
strlcpy(pnp, argv[0], AFSPATHMAX);
if (afscp_Init(NULL) != 0)
exit(1);
- code = cmd_Dispatch(argc, argv);
+ cmd_Dispatch(argc, argv);
afscp_Finalize();
exit(0);
* 2 if both dirName and baseName were filled in
*/
static int
-BreakUpPath(char *fullPath, char *dirName, char *baseName)
+BreakUpPath(char *fullPath, char *dirName, char *baseName, size_t baseNameSize)
{
char *lastSlash;
size_t dirNameLen = 0;
/* then lastSlash points to the last path separator in fullPath */
if (useDirName) {
dirNameLen = strlen(fullPath) - strlen(lastSlash);
- strlcpy(dirName, fullPath, dirNameLen + 1);
+ strlcpy(dirName, fullPath, min(dirNameLen + 1, baseNameSize));
code++;
}
if (useBaseName) {
lastSlash++;
- strlcpy(baseName, lastSlash, strlen(lastSlash) + 1);
+ strlcpy(baseName, lastSlash, min(strlen(lastSlash) + 1, baseNameSize));
code++;
}
} else {
/* there are no path separators in fullPath -- it's just a baseName */
if (useBaseName) {
- strlcpy(baseName, fullPath, strlen(fullPath) + 1);
+ strlcpy(baseName, fullPath, min(strlen(fullPath) + 1, baseNameSize));
code++;
}
}
}
}
if (!append && !overWrite) { /* must create a new file in this case */
- if ( BreakUpPath(fname, dirName, baseName) != 2 ) {
+ if ( BreakUpPath(fname, dirName, baseName, AFSNAMEMAX) != 2 ) {
code = EINVAL;
afs_com_err(pnp, code, "(must provide full AFS path)");
afscp_FreeFid(newvfp);