- strcpy( cdir->d_name, name );
- cdir->d_name[namlen] = '\0';
-
- cdir->d_did = 0;
-
-#if AD_VERSION > AD_VERSION1
- /* look in AD v2 header */
- memset(&ad, 0, sizeof(ad));
- if (ad_open(upath, ADFLAGS_HF|ADFLAGS_DIR, O_RDONLY, 0, &ad) >= 0) {
- /* if we can parse the AppleDouble header, retrieve the DID entry into cdir->d_did */
- memcpy(&cdir->d_did, ad_entry(&ad, ADEID_DID), sizeof(cdir->d_did));
- ad_close(&ad, ADFLAGS_HF);
- }
-#endif /* AD_VERSION */
-
-#ifdef CNID_DB
- /* 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 == CNID_INVALID) {
- switch (errno) {
- case CNID_ERR_PARAM:
- LOG(log_error, logtype_afpd, "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) {
-#ifdef USE_LASTDID
- /* last way of doing DIDs */
- cdir->d_did = htonl( vol->v_lastdid++ );
-#else /* USE_LASTDID */
- lstp = lstat(upath, &lst) < 0 ? st : &lst;
-#ifdef DID_MTAB
- /* mtab way of doing DIDs */
- cdir->d_did = htonl( afpd_st_cnid ( lstp ) );
-#else /* DID_MTAB */
- /* the old way of doing DIDs (default) */
- cdir->d_did = htonl( CNID(lstp, 0) );
-#endif /* DID_MTAB */
-#endif /* USE_LASTDID */
- }