diff --git a/modules/libpref/prefapi.cpp b/modules/libpref/prefapi.cpp index 8aaf4077bb..1eb06780b4 100644 --- a/modules/libpref/prefapi.cpp +++ b/modules/libpref/prefapi.cpp @@ -989,7 +989,8 @@ void PREF_ReaderCallback(void *closure, PrefValue value, PrefType type, bool isDefault, - bool isStickyDefault) + bool isStickyDefault, + bool isLocked) { uint32_t flags = 0; @@ -1002,4 +1003,6 @@ void PREF_ReaderCallback(void *closure, flags |= kPrefForceSet; } pref_HashPref(pref, value, type, flags); + if (isLocked) + PREF_LockPref(pref, true); } diff --git a/modules/libpref/prefapi.h b/modules/libpref/prefapi.h index 9ef014adaf..1c74a7045b 100644 --- a/modules/libpref/prefapi.h +++ b/modules/libpref/prefapi.h @@ -243,7 +243,8 @@ void PREF_ReaderCallback( void *closure, PrefValue value, PrefType type, bool isDefault, - bool isStickyDefault); + bool isStickyDefault, + bool isLocked); /* diff --git a/modules/libpref/prefread.cpp b/modules/libpref/prefread.cpp index 605dcaac63..82321673bf 100644 --- a/modules/libpref/prefread.cpp +++ b/modules/libpref/prefread.cpp @@ -43,6 +43,7 @@ enum { #define BITS_PER_HEX_DIGIT 4 static const char kUserPref[] = "user_pref"; +static const char kLockPref[] = "lock_pref"; static const char kPref[] = "pref"; static const char kPrefSticky[] = "sticky_pref"; static const char kTrue[] = "true"; @@ -146,7 +147,7 @@ pref_DoCallback(PrefParseState *ps) break; } (*ps->reader)(ps->closure, ps->lb, value, ps->vtype, ps->fdefault, - ps->fstickydefault); + ps->fstickydefault, ps->flock); return true; } @@ -215,6 +216,7 @@ PREF_ParseBuf(PrefParseState *ps, const char *buf, int bufLen) ps->vtype = PrefType::Invalid; ps->fdefault = false; ps->fstickydefault = false; + ps->flock = false; } switch (c) { case '/': /* begin comment block or line? */ @@ -225,11 +227,14 @@ PREF_ParseBuf(PrefParseState *ps, const char *buf, int bufLen) break; case 'u': /* indicating user_pref */ case 's': /* indicating sticky_pref */ + case 'l': /* indicating lock_pref */ case 'p': /* indicating pref */ if (c == 'u') { ps->smatch = kUserPref; } else if (c == 's') { ps->smatch = kPrefSticky; + } else if (c == 'l') { + ps->smatch = kLockPref; } else { ps->smatch = kPref; } @@ -277,8 +282,9 @@ PREF_ParseBuf(PrefParseState *ps, const char *buf, int bufLen) /* name parsing */ case PREF_PARSE_UNTIL_NAME: if (c == '\"' || c == '\'') { - ps->fdefault = (ps->smatch == kPref || ps->smatch == kPrefSticky); + ps->fdefault = (ps->smatch == kPref || ps->smatch == kPrefSticky || ps->smatch == kLockPref); ps->fstickydefault = (ps->smatch == kPrefSticky); + ps->flock = (ps->smatch == kLockPref); ps->quotechar = c; ps->nextstate = PREF_PARSE_UNTIL_COMMA; /* return here when done */ state = PREF_PARSE_QUOTED_STRING; diff --git a/modules/libpref/prefread.h b/modules/libpref/prefread.h index 2a09b30b6e..a2dac02f8d 100644 --- a/modules/libpref/prefread.h +++ b/modules/libpref/prefread.h @@ -34,7 +34,8 @@ typedef void (*PrefReader)(void *closure, PrefValue val, PrefType type, bool defPref, - bool stickyPref); + bool stickyPref, + bool lockPref); /** * Report any errors or warnings we encounter during parsing. @@ -62,6 +63,7 @@ typedef struct PrefParseState { PrefType vtype; /* PREF_STRING,INT,BOOL */ bool fdefault; /* true if (default) pref */ bool fstickydefault; /* true if (sticky) pref */ + bool flock; /* true if pref to be locked */ } PrefParseState; /**