11754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato/*
21754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Copyright (C) 2016 The Android Open Source Project
31754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato *
41754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Licensed under the Apache License, Version 2.0 (the "License");
51754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * you may not use this file except in compliance with the License.
61754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * You may obtain a copy of the License at
71754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato *
81754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato *      http://www.apache.org/licenses/LICENSE-2.0
91754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato *
101754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Unless required by applicable law or agreed to in writing, software
111754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * distributed under the License is distributed on an "AS IS" BASIS,
121754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * See the License for the specific language governing permissions and
141754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * limitations under the License.
151754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato */
161754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
171754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include "protobuf.h"
181754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
191754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratouint8_t*
201754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratowrite_raw_varint(uint8_t* buf, uint32_t val)
211754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{
221754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    uint8_t* p = buf;
231754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    while (true) {
241754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato        if ((val & ~0x7F) == 0) {
251754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato            *p++ = (uint8_t)val;
261754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato            return p;
271754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato        } else {
281754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato            *p++ = (uint8_t)((val & 0x7F) | 0x80);
291754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato            val >>= 7;
301754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato        }
311754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    }
321754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato}
331754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
341754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratouint8_t*
351754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratowrite_length_delimited_tag_header(uint8_t* buf, uint32_t fieldId, size_t size)
361754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{
371754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    buf = write_raw_varint(buf, (fieldId << 3) | 2);
381754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    buf = write_raw_varint(buf, size);
391754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    return buf;
401754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato}
411754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
42