do_something();
}
+In switch statements, to fall through from one case statement to another, use
+AFS_FALLTHROUGH to mark the intentional fall through. Do not use fall through
+comments (e.g. /* fallthrough */), as some compilers do not recognize them and
+will flag the case statement with an implied fallthrough warning.
+
+Use:
+
+ switch (x) {
+ case 1:
+ do_something();
+ AFS_FALLTHROUGH;
+ case 2:
+ do_something_else();
+ AFS_FALLTHROUGH;
+ default:
+ do_some_action();
+ }
+
+Instead of using fallthrough comments:
+
+ switch (x) {
+ case 1:
+ do_something();
+ /* fallthrough */
+ case 2:
+ do_something_else();
+ /* fallthrough */
+ default:
+ do_some_action();
+ }
+
+Or not marking the fall through:
+
+ switch (x) {
+ case 1:
+ do_something();
+ case 2:
+ do_something_else();
+ default:
+ do_some_action();
+ }
Dependencies required to build OpenAFS from source
--------------------------------------------------
{
case itCELL:
AfsAdmSvr_MarkRefreshThread (idScope);
- // fall through
+ AFS_FALLTHROUGH;
case itSERVER:
ASACTION Action;
if ( !GetDlgItemText(hDialog, ID_MID_TEXT+i, mid_tb[i].buf, mid_tb[i].len) )
*mid_tb[i].buf = '\0';
}
- /* fallthrough */
+ AFS_FALLTHROUGH;
case IDCANCEL:
EndDialog(hDialog, LOWORD(wParam));
return TRUE;
cm_daemons[daemonID].retryCount++;
osi_QAddT((osi_queue_t **) &cm_daemons[daemonID].head, (osi_queue_t **)&cm_daemons[daemonID].tail, &rp->q);
break;
- } /* otherwise fall through */
+ }
+ AFS_FALLTHROUGH;
case 0: /* success */
default: /* other error */
if (code == 0) {
break;
case '.':
dot++;
- /* fallthrough */
+ AFS_FALLTHROUGH;
default:
if ( star ) {
newmask[j++] = '*';
NetrIntGenerateSharePath(ServerName, &scp->fid);
/* must be the empty string */
InfoStruct->ShareInfo2->shi2_passwd = wcsdup(L"");
- /* fall-through */
+ AFS_FALLTHROUGH;
case 1:
InfoStruct->ShareInfo1->shi1_type = STYPE_DISKTREE;
InfoStruct->ShareInfo1->shi1_remark =
NetrIntGenerateShareRemark(scp, &scp->fid);
- /* fall-through */
+ AFS_FALLTHROUGH;
case 0:
/* Canonicalized version of NetName parameter */
InfoStruct->ShareInfo0->shi0_netname = wcsdup(NetName);
switch (Level) {
case 103:
InfoStruct->ServerInfo103->sv103_capabilities = 0;
- /* fall-through */
+ AFS_FALLTHROUGH;
case 102:
InfoStruct->ServerInfo102->sv102_users = 0xFFFFFFFF;
InfoStruct->ServerInfo102->sv102_disc = SV_NODISC;
InfoStruct->ServerInfo102->sv102_anndelta = 0;
InfoStruct->ServerInfo102->sv102_licenses = 0;
InfoStruct->ServerInfo102->sv102_userpath = wcsdup(L"C:\\");
- /* fall-through */
+ AFS_FALLTHROUGH;
case 101:
InfoStruct->ServerInfo101->sv101_version_major = AFSPRODUCT_VERSION_MAJOR;
InfoStruct->ServerInfo101->sv101_version_minor = AFSPRODUCT_VERSION_MINOR;
InfoStruct->ServerInfo101->sv101_type = SV_TYPE_WORKSTATION | SV_TYPE_SERVER | SV_TYPE_SERVER_UNIX;
InfoStruct->ServerInfo101->sv101_comment = wcsdup(wAFSVersion);
- /* fall-through */
+ AFS_FALLTHROUGH;
case 100:
InfoStruct->ServerInfo100->sv100_platform_id = SV_PLATFORM_ID_AFS;
/* The Netbios Name */
case NRC_SNUMOUT:
case NRC_SABORT:
LogEvent(EVENTLOG_WARNING_TYPE, MSG_UNEXPECTED_SMB_SESSION_CLOSE, ncb_error_string(rc));
- /* fallthrough */
+ AFS_FALLTHROUGH;
case NRC_SCLOSED:
/* Client closed session */
vcp = smb_FindVC(ncbp->ncb_lsn, 0, lanas[idx_session]);
shortName);
fp->u.FfileBothDirectoryInfo.shortNameLength = cm_ClientStrLen(shortName);
#endif
- }
- /* Fallthrough */
+ }
+ AFS_FALLTHROUGH;
case SMB_FIND_FILE_FULL_DIRECTORY_INFO:
fp->u.FfileFullDirectoryInfo.eaSize = 0;
- /* Fallthrough */
+ AFS_FALLTHROUGH;
case SMB_FIND_FILE_DIRECTORY_INFO:
fp->u.FfileDirectoryInfo.nextEntryOffset = 0;
fp->u.FfileBothDirectoryInfo.shortNameLength = cm_ClientStrLen(shortName);
#endif
}
- /* Fallthrough */
+ AFS_FALLTHROUGH;
case SMB_FIND_FILE_FULL_DIRECTORY_INFO:
fp->u.FfileFullDirectoryInfo.eaSize = 0;
- /* Fallthrough */
+ AFS_FALLTHROUGH;
case SMB_FIND_FILE_DIRECTORY_INFO:
fp->u.FfileDirectoryInfo.nextEntryOffset = orbytes + align;
{
case IDOK:
Server_GetDates_OnOK (hDlg);
- // fall through
+ AFS_FALLTHROUGH;
case IDCANCEL:
DestroyWindow (hDlg);
{
case IDOK:
Server_Install_OnOK (hDlg);
- // fall through
+ AFS_FALLTHROUGH;
case IDCANCEL:
DestroyWindow (hDlg);
{
case IDOK:
Server_Prune_OnOK (hDlg);
- // fall through
+ AFS_FALLTHROUGH;
case IDCANCEL:
DestroyWindow (hDlg);
if (*max_len < 5) {
return 255;
}
- /* fall through */
+ AFS_FALLTHROUGH;
case VN_TYPE_CELL:
case VN_TYPE_ALIAS:
case LARGE_FILES_BYPASS_CACHE:
if (i_size_read(ip) > cache_bypass_threshold)
return 1;
- /* fall through */
+ AFS_FALLTHROUGH;
default:
return 0;
}
switch (argc) {
case 5:
subtype = atoi(argv[4]);
- /* fall through */
+ AFS_FALLTHROUGH;
case 4:
type = stringToType(argv[2]);
kvno = atoi(argv[3]);
i = get_princ_len(k5context, k5princ, 1);
if (i > MAXKTCNAMELEN-1) i = MAXKTCNAMELEN-1;
memcpy(ktcprinc->instance, get_princ_str(k5context, k5princ, 1), i);
- /* fall through */
+ AFS_FALLTHROUGH;
case 1:
i = get_princ_len(k5context, k5princ, 0);
if (i > MAXKTCNAMELEN-1) i = MAXKTCNAMELEN-1;
memcpy(ktcprinc->name, get_princ_str(k5context, k5princ, 0), i);
- /* fall through */
+ AFS_FALLTHROUGH;
case 0:
break;
}
dparamsPtr->volumesFailed++;
continue;
}
- /* fall through */
+ AFS_FALLTHROUGH;
case RWVOL:
for (e = 0; e < vldbEntry.nServers; e++) { /* Find the RW volume */
if (vldbEntry.serverFlags[e] & VLSF_RWVOL)
dnl
AC_DEFUN([OPENAFS_C_ATTRIBUTE], [
AX_GCC_FUNC_ATTRIBUTE([always_inline])
+ AX_GCC_FUNC_ATTRIBUTE([fallthrough])
AX_GCC_FUNC_ATTRIBUTE([format])
AX_GCC_FUNC_ATTRIBUTE([nonnull])
AX_GCC_FUNC_ATTRIBUTE([noreturn])
case CMD_SINGLE_OR_FLAG:
if (tp->items == &dummy)
break;
- /* fall through */
+ AFS_FALLTHROUGH;
case CMD_SINGLE:
case CMD_LIST:
/* free whole list in both cases, just for fun */
# define AFS_NONNULL(x)
#endif
+#if defined(AFS_LINUX26_ENV) && defined(fallthrough)
+# define AFS_FALLTHROUGH fallthrough
+#elif defined(HAVE_FUNC_ATTRIBUTE_FALLTHROUGH)
+# define AFS_FALLTHROUGH __attribute__((fallthrough))
+#else
+# define AFS_FALLTHROUGH do {} while(0)
+#endif
+
/*
* Conditionally remove unreached statements under Solaris Studio.
*/
/* All the case statements fall through */
switch(length) {
- case 3 : c+=k[2];
- /* fall through */
- case 2 : b+=k[1];
- /* fall through */
+ case 3 : c+=k[2]; AFS_FALLTHROUGH;
+ case 2 : b+=k[1]; AFS_FALLTHROUGH;
case 1 : a+=k[0];
- opr_jhash_final(a, b, c);
- /* fall through */
+ opr_jhash_final(a, b, c); AFS_FALLTHROUGH;
case 0: /* case 0: nothing left to add */
break;
}
/* All the case statements fall through */
switch(length) {
- case 12 : c += (afs_uint32) str[11]<<24; /* fall through */
- case 11 : c += (afs_uint32) str[10]<<16; /* fall through */
- case 10 : c += (afs_uint32) str[9]<<8; /* fall through */
- case 9 : c += (afs_uint32) str[8]; /* fall through */
- case 8 : b += (afs_uint32) str[7]<<24; /* fall through */
- case 7 : b += (afs_uint32) str[6]<<16; /* fall through */
- case 6 : b += (afs_uint32) str[5]<<8; /* fall through */
- case 5 : b += (afs_uint32) str[4]; /* fall through */
- case 4 : a += (afs_uint32) str[3]<<24; /* fall through */
- case 3 : a += (afs_uint32) str[2]<<16; /* fall through */
- case 2 : a += (afs_uint32) str[1]<<8; /* fall through */
+ case 12 : c += (afs_uint32) str[11]<<24; AFS_FALLTHROUGH;
+ case 11 : c += (afs_uint32) str[10]<<16; AFS_FALLTHROUGH;
+ case 10 : c += (afs_uint32) str[9]<<8; AFS_FALLTHROUGH;
+ case 9 : c += (afs_uint32) str[8]; AFS_FALLTHROUGH;
+ case 8 : b += (afs_uint32) str[7]<<24; AFS_FALLTHROUGH;
+ case 7 : b += (afs_uint32) str[6]<<16; AFS_FALLTHROUGH;
+ case 6 : b += (afs_uint32) str[5]<<8; AFS_FALLTHROUGH;
+ case 5 : b += (afs_uint32) str[4]; AFS_FALLTHROUGH;
+ case 4 : a += (afs_uint32) str[3]<<24; AFS_FALLTHROUGH;
+ case 3 : a += (afs_uint32) str[2]<<16; AFS_FALLTHROUGH;
+ case 2 : a += (afs_uint32) str[1]<<8; AFS_FALLTHROUGH;
case 1 : a += (afs_uint32) str[0];
- opr_jhash_final(a, b, c); /* fall through */
+ opr_jhash_final(a, b, c); AFS_FALLTHROUGH;
case 0: /* case 0: nothing left to add */
break;
}
case RX_CALL_ARRIVAL:
call->traceWait = now;
+ break;
+
default:
break;
}
if (sp == NULL) {
return (FALSE);
}
- /* fall through */
+ AFS_FALLTHROUGH;
case XDR_ENCODE:
return (xdr_opaque(xdrs, sp, nodesize));
if (sp == NULL) {
return (TRUE); /* already free */
}
- /* Fall through */
+ AFS_FALLTHROUGH;
case XDR_ENCODE:
size = strlen(sp);
break;
return (FALSE);
}
sp[size] = 0;
- /* fall through */
+ AFS_FALLTHROUGH;
case XDR_ENCODE:
return (xdr_opaque(xdrs, sp, size));
case KRB5_ENCTYPE_DES3_CBC_SHA1:
if (compress_parity_bits(keydata, &keylen))
return 1;
- /* FALLTHROUGH */
+ AFS_FALLTHROUGH;
default:
if (enctype < 0)
return 1;
}
case '\0':
--format;
- /* FALLTHROUGH */
+ AFS_FALLTHROUGH;
case '%':
if ((*state->append_char) (state, c))
return -1;
*/
/* parsevnode.c - Parse a VNode */
-
+#include <afsconfig.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <errno.h>
return r;
break;
}
- /* fall through */
+ AFS_FALLTHROUGH;
default:
if ((r = xfskip(X, v->size)))
return r;
#else /* no ACLS */
statemap[ROOTINO] = DSTATE;
#endif /* ACLS */
- /* fall into ... */
+ AFS_FALLTHROUGH;
case DSTATE:
descend(&rootdesc, ROOTINO);
else if ((n = reply("REMOVE")) == 1)
break;
}
- /* fall through */
+ AFS_FALLTHROUGH;
case FSTATE:
#ifdef VICE
case DCLEAR:
case DFOUND:
newcg->cg_cs.cs_ndir++;
- /* fall through */
+ AFS_FALLTHROUGH;
#ifdef VICE
case VSTATE:
VOL_CV_WAIT(&V_attachCV(vp));
}
+ break;
case debugUtility:
break;
* attaching the volume would be safe */
VRegisterVolOp_r(vp, &info);
vp->pending_vol_op->vol_op_state = FSSYNC_VolOpRunningUnknown;
- /* fall through */
+ goto done;
case VOL_STATE_DELETED:
goto done;
* attaching the volume would be safe */
VRegisterVolOp_r(vp, &info);
vp->pending_vol_op->vol_op_state = FSSYNC_VolOpRunningUnknown;
- /* fall through */
+ goto done;
case VOL_STATE_DELETED:
goto done;
switch (sres.state) {
case SALVSYNC_STATE_ERROR:
printf("salvageserver reports salvage ended in an error; check log files for more details\n");
- /* fall through */
+ AFS_FALLTHROUGH;
case SALVSYNC_STATE_DONE:
case SALVSYNC_STATE_UNKNOWN:
done = 1;
switch (clone->state) {
case SALVSYNC_STATE_QUEUED:
DeleteFromSalvageQueue(clone);
- /* fall through */
+ AFS_FALLTHROUGH;
case SALVSYNC_STATE_SALVAGING:
switch (parent->state) {
case SALVSYNC_STATE_UNKNOWN:
(V_attachState(vp) != VOL_STATE_PREATTACHED)) {
break;
}
- /* fall through */
+ AFS_FALLTHROUGH;
case 1:
if ((V_attachState(vp) == VOL_STATE_ATTACHED) &&
(vp->header == NULL)) {
break;
}
- /* fall through */
+ AFS_FALLTHROUGH;
case 2:
if (VIsExclusiveState(V_attachState(vp))) {
break;
}
- /* fall through */
+ AFS_FALLTHROUGH;
case 3:
*idx = nqp;
DeleteVolumeFromVByPList_r(vp);
case VOL_STATE_PREATTACHED:
case VOL_STATE_ERROR:
VChangeState_r(vp, VOL_STATE_UNATTACHED);
+ break;
case VOL_STATE_UNATTACHED:
case VOL_STATE_DELETED:
break;
case VOL_INFO_LIST_SINGLE:
Log("1 Volser: GetVolInfo: Volume %" AFS_VOLID_FMT " (%s:%s) will be destroyed on next salvage\n",
afs_printable_VolumeId_lu(volumeId), pname, volname);
+ goto drop;
default:
goto drop;