/*
- * $Id: enumerate.c,v 1.12 2002-01-03 17:49:38 sibaz Exp $
+ * $Id: enumerate.c,v 1.16 2002-01-29 21:12:14 jmarcus Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
#include <dirent.h>
#include <errno.h>
-#include <syslog.h>
+#include <atalk/logger.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/file.h>
#include "parse_mtab.h"
#endif /* DID_MTAB */
+#define min(a,b) ((a)<(b)?(a):(b))
+
struct dir *
adddir( vol, dir, name, namlen, upath, upathlen, st )
struct vol *vol;
#endif /* USE_LASTDID */
if ((cdir = dirnew(namlen + 1)) == NULL) {
- syslog( LOG_ERR, "adddir: malloc: %s", strerror(errno) );
+ LOG(log_error, logtype_default, "adddir: malloc: %s", strerror(errno) );
return NULL;
}
strcpy( cdir->d_name, name );
/* add to cnid db */
cdir->d_did = cnid_add(vol->v_db, st, dir->d_did, upath,
upathlen, cdir->d_did);
+ /* Fail out if things go bad with CNID. */
+ if (cdir->d_did < 0) {
+ switch (errno) {
+ case CNID_ERR_PARAM:
+ LOG(log_error, logtype_default, "adddir: Incorrect parameters passed to cnid_add");
+ return NULL;
+ case CNID_ERR_PATH:
+ case CNID_ERR_DB:
+ case CNID_ERR_MAX:
+ return NULL;
+ }
+ }
#endif /* CNID_DB */
if (cdir->d_did == 0) {
#ifndef CNID_DB
if (edir->d_name) {
if (strcmp(edir->d_name, cdir->d_name)) {
- syslog(LOG_INFO, "WARNING: DID conflict for '%s' and '%s'. Are these the same file?", edir->d_name, cdir->d_name);
+ LOG(log_info, logtype_default, "WARNING: DID conflict for '%s' and '%s'. Are these the same file?", edir->d_name, cdir->d_name);
}
free(cdir->d_name);
free(cdir);
if ( sd.sd_buflen == 0 ) {
if (( sd.sd_buf = (char *)malloc( SDBUFBRK )) == NULL ) {
- syslog( LOG_ERR, "afp_enumerate: malloc: %s", strerror(errno) );
+ LOG(log_error, logtype_default, "afp_enumerate: malloc: %s", strerror(errno) );
*rbuflen = 0;
return AFPERR_MISC;
}
maxsz = ntohs( maxsz );
ibuf += sizeof( maxsz );
+ maxsz = min(maxsz, *rbuflen);
+
if (( path = cname( vol, dir, &ibuf )) == NULL ) {
*rbuflen = 0;
return( AFPERR_NODIR );
start = sd.sd_buf;
if ((buf = (char *) realloc( sd.sd_buf, sd.sd_buflen +
SDBUFBRK )) == NULL ) {
- syslog( LOG_ERR, "afp_enumerate: realloc: %s",
- strerror(errno) );
+ LOG(log_error, logtype_default, "afp_enumerate: realloc: %s",
+ strerror(errno) );
closedir(dp);
*rbuflen = 0;
return AFPERR_MISC;
sd.sd_last++;
if ( stat( sd.sd_last, &st ) < 0 ) {
- syslog( LOG_DEBUG, "afp_enumerate: stat %s: %s",
- sd.sd_last, strerror(errno) );
+ LOG(log_debug, logtype_default, "afp_enumerate: stat %s: %s",
+ sd.sd_last, strerror(errno) );
sd.sd_last += len + 1;
continue;
}