|
@@ -28,12 +28,6 @@
|
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
|
|
-#include <arpa/inet.h>
|
|
|
|
-#include <errno.h>
|
|
|
|
-#include <limits.h>
|
|
|
|
-#include <stdlib.h>
|
|
|
|
-#include <unistd.h>
|
|
|
|
-
|
|
|
|
#include <fstream>
|
|
#include <fstream>
|
|
#include <iostream>
|
|
#include <iostream>
|
|
#include <sstream>
|
|
#include <sstream>
|
|
@@ -46,14 +40,6 @@
|
|
#include <google/protobuf/descriptor.pb.h>
|
|
#include <google/protobuf/descriptor.pb.h>
|
|
#include <google/protobuf/stubs/strutil.h>
|
|
#include <google/protobuf/stubs/strutil.h>
|
|
|
|
|
|
-#ifndef htonl
|
|
|
|
-#include <netinet/in.h>
|
|
|
|
-#endif
|
|
|
|
-
|
|
|
|
-#ifndef O_EXLOCK
|
|
|
|
-#include <sys/file.h>
|
|
|
|
-#endif
|
|
|
|
-
|
|
|
|
// NOTE: src/google/protobuf/compiler/plugin.cc makes use of cerr for some
|
|
// NOTE: src/google/protobuf/compiler/plugin.cc makes use of cerr for some
|
|
// error case, so it seem to be ok to use as a back door for errors.
|
|
// error case, so it seem to be ok to use as a back door for errors.
|
|
|
|
|
|
@@ -65,7 +51,6 @@ namespace objectivec {
|
|
namespace {
|
|
namespace {
|
|
|
|
|
|
hash_set<string> gClassWhitelist;
|
|
hash_set<string> gClassWhitelist;
|
|
-stringstream gClassListStream;
|
|
|
|
|
|
|
|
// islower()/isupper()/tolower()/toupper() change based on locale.
|
|
// islower()/isupper()/tolower()/toupper() change based on locale.
|
|
|
|
|
|
@@ -754,7 +739,7 @@ string DefaultValue(const FieldDescriptor* field) {
|
|
|
|
|
|
// Must convert to a standard byte order for packing length into
|
|
// Must convert to a standard byte order for packing length into
|
|
// a cstring.
|
|
// a cstring.
|
|
- uint32_t length = htonl(default_string.length());
|
|
|
|
|
|
+ uint32 length = ghtonl(default_string.length());
|
|
string bytes((const char*)&length, sizeof(length));
|
|
string bytes((const char*)&length, sizeof(length));
|
|
bytes.append(default_string);
|
|
bytes.append(default_string);
|
|
return "(NSData*)\"" + CEscape(bytes) + "\"";
|
|
return "(NSData*)\"" + CEscape(bytes) + "\"";
|
|
@@ -809,60 +794,6 @@ string BuildCommentsString(const SourceLocation& location) {
|
|
return final_comments;
|
|
return final_comments;
|
|
}
|
|
}
|
|
|
|
|
|
-bool WriteClassList(string* error) {
|
|
|
|
- const char* file_name = getenv("GPB_CLASSLIST_PATH");
|
|
|
|
- if (file_name != NULL) {
|
|
|
|
-#ifndef O_EXLOCK
|
|
|
|
- int fd = open(file_name, O_WRONLY | O_APPEND | O_CREAT,
|
|
|
|
- (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH));
|
|
|
|
-#else
|
|
|
|
- int fd = open(file_name, O_WRONLY | O_APPEND | O_EXLOCK | O_CREAT,
|
|
|
|
- (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH));
|
|
|
|
-#endif
|
|
|
|
- if (fd == -1) {
|
|
|
|
- if (error != NULL) {
|
|
|
|
- stringstream err_stream;
|
|
|
|
- err_stream << endl << file_name << ":0:0: error:"
|
|
|
|
- << "Unable to open (" << errno << ")";
|
|
|
|
- *error = err_stream.str();
|
|
|
|
- }
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
-#ifndef O_EXLOCK
|
|
|
|
- if (flock(fd, LOCK_EX) < 0) {
|
|
|
|
- if (error != NULL) {
|
|
|
|
- stringstream err_stream;
|
|
|
|
- err_stream << endl << file_name << ":0:0: error:"
|
|
|
|
- << "Unable to lock (" << errno << ")";
|
|
|
|
- *error = err_stream.str();
|
|
|
|
- }
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
-#endif
|
|
|
|
- // Need a local to hold the list so the cstring stays valid for the
|
|
|
|
- // write call.
|
|
|
|
- const string& class_list_str = gClassListStream.str();
|
|
|
|
- int write_out = write(fd, class_list_str.c_str(), class_list_str.length());
|
|
|
|
- int close_out = close(fd);
|
|
|
|
- if (write_out == -1 || close_out == -1) {
|
|
|
|
- if (error != NULL) {
|
|
|
|
- stringstream err_stream;
|
|
|
|
- err_stream << endl << file_name << ":0:0: error:"
|
|
|
|
- << "Unable to write (" << errno << ")";
|
|
|
|
- *error = err_stream.str();
|
|
|
|
- }
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return true;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void WriteClassNameToClassList(const string& name) {
|
|
|
|
- if (gClassListStream.good()) {
|
|
|
|
- gClassListStream << name << '\n';
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
bool InitializeClassWhitelist(string* error) {
|
|
bool InitializeClassWhitelist(string* error) {
|
|
const char* env_var_value = getenv("GPB_OBJC_CLASS_WHITELIST_PATHS");
|
|
const char* env_var_value = getenv("GPB_OBJC_CLASS_WHITELIST_PATHS");
|
|
if (env_var_value == NULL) {
|
|
if (env_var_value == NULL) {
|
|
@@ -917,7 +848,7 @@ bool FilterClass(const string& name) {
|
|
return gClassWhitelist.size() > 0;
|
|
return gClassWhitelist.size() > 0;
|
|
}
|
|
}
|
|
|
|
|
|
-void TextFormatDecodeData::AddString(int32_t key,
|
|
|
|
|
|
+void TextFormatDecodeData::AddString(int32 key,
|
|
const string& input_for_decode,
|
|
const string& input_for_decode,
|
|
const string& desired_output) {
|
|
const string& desired_output) {
|
|
for (vector<DataEntry>::const_iterator i = entries_.begin();
|
|
for (vector<DataEntry>::const_iterator i = entries_.begin();
|
|
@@ -973,14 +904,14 @@ class DecodeDataBuilder {
|
|
}
|
|
}
|
|
|
|
|
|
private:
|
|
private:
|
|
- static const uint8_t kAddUnderscore = 0b10000000;
|
|
|
|
|
|
+ static const uint8 kAddUnderscore = 0x80;
|
|
|
|
|
|
- static const uint8_t kOpAsIs = 0b00000000;
|
|
|
|
- static const uint8_t kOpFirstUpper = 0b01000000;
|
|
|
|
- static const uint8_t kOpFirstLower = 0b00100000;
|
|
|
|
- static const uint8_t kOpAllUpper = 0b01100000;
|
|
|
|
|
|
+ static const uint8 kOpAsIs = 0x00;
|
|
|
|
+ static const uint8 kOpFirstUpper = 0x40;
|
|
|
|
+ static const uint8 kOpFirstLower = 0x20;
|
|
|
|
+ static const uint8 kOpAllUpper = 0x60;
|
|
|
|
|
|
- static const int kMaxSegmentLen = 0b00011111;
|
|
|
|
|
|
+ static const int kMaxSegmentLen = 0x1f;
|
|
|
|
|
|
void AddChar(const char desired) {
|
|
void AddChar(const char desired) {
|
|
++segment_len_;
|
|
++segment_len_;
|
|
@@ -988,7 +919,7 @@ class DecodeDataBuilder {
|
|
}
|
|
}
|
|
|
|
|
|
void Push() {
|
|
void Push() {
|
|
- uint8_t op = (op_ | segment_len_);
|
|
|
|
|
|
+ uint8 op = (op_ | segment_len_);
|
|
if (need_underscore_) op |= kAddUnderscore;
|
|
if (need_underscore_) op |= kAddUnderscore;
|
|
if (op != 0) {
|
|
if (op != 0) {
|
|
decode_data_ += (char)op;
|
|
decode_data_ += (char)op;
|
|
@@ -1020,7 +951,7 @@ class DecodeDataBuilder {
|
|
|
|
|
|
bool need_underscore_;
|
|
bool need_underscore_;
|
|
bool is_all_upper_;
|
|
bool is_all_upper_;
|
|
- uint8_t op_;
|
|
|
|
|
|
+ uint8 op_;
|
|
int segment_len_;
|
|
int segment_len_;
|
|
|
|
|
|
string decode_data_;
|
|
string decode_data_;
|