/*
+--------------------------------------------------------------------+
- | libmemcached - C/C++ Client Library for memcached |
+ | libmemcached-awesome - C/C++ Client Library for memcached |
+--------------------------------------------------------------------+
| Redistribution and use in source and binary forms, with or without |
| modification, are permitted under the terms of the BSD license. |
| the terms online at: https://opensource.org/licenses/BSD-3-Clause |
+--------------------------------------------------------------------+
| Copyright (c) 2006-2014 Brian Aker https://datadifferential.com/ |
- | Copyright (c) 2020 Michael Wallner <mike@php.net> |
+ | Copyright (c) 2020-2021 Michael Wallner https://awesome.co/ |
+--------------------------------------------------------------------+
*/
#include "options.hpp"
#include "libmemcached/common.h"
+#include <cerrno>
+#include <cstring>
#include <fstream>
bool check_buffering(const client_options &opt, memcached_st &memc) {
return true;
}
+bool check_return(const client_options &opt, memcached_st &memc, memcached_return_t rc) {
+ if (!memcached_success(rc)) {
+ if (!opt.isset("quiet")) {
+ if (!memcached_fatal(rc)) {
+ if (opt.isset("verbose")) {
+ std::cerr << "Failed: " << memcached_strerror(&memc, rc) << "\n";;
+ }
+ } else {
+ std::cerr << "Fatal error: " << memcached_last_error_message(&memc) << "\n";
+ }
+ }
+ return false;
+ }
+ return true;
+}
+
bool check_return(const client_options &opt, memcached_st &memc, const char *key,
memcached_return_t rc) {
if (!memcached_success(rc)) {
if (opt.isset("debug")) {
std::cerr << "Opening '" << file << "' for writing.\n";
}
- stream.open(file);
+ errno = 0;
+ stream.open(file, std::ios::binary | std::ios::out);
if (stream.is_open()) {
return &stream;
} else if (!opt.isset("quiet")) {
- std::cerr << "Failed to open '" << file << "' for writing.\n";
+ std::cerr << "Failed to open '" << file << "' for writing: " << strerror(errno) << ".\n";
}
}
return &std::cout;
}
+
+std::istream *check_istream(const client_options &opt, const char *file, std::ifstream &stream) {
+ if (file && *file) {
+ if (file[0] != '-' || file[1] != 0) {
+ if (opt.isset("debug")) {
+ std::cerr << "Opening '" << file << "' for reading.\n";
+ }
+ errno = 0;
+ stream.open(file, std::ios::binary | std::ios::in);
+ if (stream.is_open()) {
+ return &stream;
+ } else if (!opt.isset("quiet")) {
+ std::cerr << "Failed to open '" << file << "' for reading: " << strerror(errno) << ".\n";
+ }
+ return nullptr;
+ }
+ }
+ return &std::cin;
+}