pgpmergeprefs.c

来自「PGP8.0源码 请认真阅读您的文件包然后写出其具体功能」· C语言 代码 · 共 140 行

C
140
字号
/*____________________________________________________________________________
	Copyright (C) 2002 PGP Corporation
	All rights reserved.

	pgpMergePrefs.c - 	merge prefs from one prefref into another, respecting
						the "merge" flag

	$Id: pgpMergePrefs.c,v 1.6 2002/08/06 20:09:18 dallen Exp $
____________________________________________________________________________*/

#include "pgpClientLib.h"
#include "pgpClientPrefs.h"
#include "pgpNetPrefs.h"

static PGPError
sRemoveMergingPrefs (
	PGPPrefRef			prefsToAdd,
	PGPPrefRef			prefs,
	PGPUInt32			uIndexFirst,
	PGPUInt32			uIndexLast )
{
	PGPError	err			= kPGPError_NoErr;
	PGPUInt32	uIndex;
	PGPUInt32	uFlagsToAdd;
	PGPUInt32	uFlags;

	for (uIndex = uIndexFirst; uIndex < uIndexLast; uIndex++)
	{
		err = PGPGetPrefFlags (prefsToAdd, uIndex, &uFlagsToAdd);
		if ((err == kPGPError_PrefNotFound) || 
			(err == kPGPError_BadParams))
		{
			err = kPGPError_NoErr;
			continue;
		}
		else if (IsPGPError (err))
			return err;

		if (!(uFlagsToAdd & kPGPPrefFlags_Overwrite))
		{
			/* PGPGetPrefFlags has less overhead than PGPGetPrefData */
			err = PGPGetPrefFlags (prefs, uIndex, &uFlags);
			if (IsntPGPError (err))
			{
				PGPRemovePref (prefsToAdd, uIndex);
				PGPClearPrefFlags (prefs, uIndex, MAX_PGPUInt32);
				PGPSetPrefFlags (prefs, uIndex, uFlagsToAdd);
			}
		}
	}

	return err;
}


PGPError PGPclExport
PGPclMergePrefs(
	PGPPrefRef			prefsToAdd,
	PGPPrefRef			prefs )
{
	PGPError	err		= kPGPError_NoErr;

	if (!PGPPrefRefIsValid (prefsToAdd))
		return kPGPError_BadParams;
	if (!PGPPrefRefIsValid (prefs))
		return kPGPError_BadParams;

	err = sRemoveMergingPrefs (prefsToAdd, prefs,
			kPGPPrefBoolFirst, kPGPPrefBoolLast); CKERR;

	err = sRemoveMergingPrefs (prefsToAdd, prefs,
			kPGPPrefNumberFirst, kPGPPrefNumberLast); CKERR;

	err = sRemoveMergingPrefs (prefsToAdd, prefs,
			kPGPPrefStringFirst, kPGPPrefStringLast); CKERR;

	err = sRemoveMergingPrefs (prefsToAdd, prefs,
			kPGPPrefByteFirst, kPGPPrefByteLast); CKERR;

	err = sRemoveMergingPrefs (prefsToAdd, prefs,
			kPGPPrefStructFirst, kPGPPrefStructLast); CKERR;

	err = sRemoveMergingPrefs (prefsToAdd, prefs,
			kPGPPrefArrayFirst, kPGPPrefArrayLast); CKERR;


	err = PGPAddPrefs (prefsToAdd, prefs);

done:
	return err;
}


PGPError PGPclExport
PGPclMergeNetPrefs(
	PGPPrefRef			prefsToAdd,
	PGPPrefRef			prefs )
{
	PGPError	err		= kPGPError_NoErr;

	if (!PGPPrefRefIsValid (prefsToAdd))
		return kPGPError_BadParams;
	if (!PGPPrefRefIsValid (prefs))
		return kPGPError_BadParams;

	err = sRemoveMergingPrefs (prefsToAdd, prefs,
			kPGPNetPrefBoolFirst, kPGPNetPrefBoolLast); CKERR;

	err = sRemoveMergingPrefs (prefsToAdd, prefs,
			kPGPNetPrefNumberFirst, kPGPNetPrefNumberLast); CKERR;

	err = sRemoveMergingPrefs (prefsToAdd, prefs,
			kPGPNetPrefStringFirst, kPGPNetPrefStringLast); CKERR;

	err = sRemoveMergingPrefs (prefsToAdd, prefs,
			kPGPNetPrefByteFirst, kPGPNetPrefByteLast); CKERR;

	err = sRemoveMergingPrefs (prefsToAdd, prefs,
			kPGPNetPrefStructFirst, kPGPNetPrefStructLast); CKERR;

	err = sRemoveMergingPrefs (prefsToAdd, prefs,
			kPGPNetPrefArrayFirst, kPGPNetPrefArrayLast); CKERR;


	err = PGPAddPrefs (prefsToAdd, prefs);

done:
	return err;
}


/*__Editor_settings____

	Local Variables:
	tab-width: 4
	End:
	vi: ts=4 sw=4
	vim: si
_____________________*/

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?