Skip to content

Commit 797c1fa

Browse files
committed
Get rid of fcitx::getline usage
1 parent f1fee96 commit 797c1fa

File tree

5 files changed

+21
-19
lines changed

5 files changed

+21
-19
lines changed

CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.6)
22

33
project(fcitx5-unikey VERSION 5.1.6)
44

5-
set(REQUIRED_FCITX_VERSION 5.1.12)
5+
set(REQUIRED_FCITX_VERSION 5.1.13)
66
find_package(ECM 1.0.0 REQUIRED)
77
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
88
include(FeatureSummary)

keymap-editor/model.cpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include <fcitx-utils/charutils.h>
1414
#include <fcitx-utils/i18n.h>
1515
#include <fcitx-utils/standardpath.h>
16+
#include <fcitx-utils/unixfd.h>
1617
#include <fcntl.h>
1718

1819
namespace fcitx {
@@ -156,9 +157,8 @@ void KeymapModel::load() {
156157
beginResetModel();
157158
auto keymapFile = StandardPath::global().open(
158159
StandardPath::Type::PkgConfig, "unikey/keymap.txt", O_RDONLY);
159-
auto fp = fs::openFD(keymapFile, "rb");
160-
if (fp) {
161-
list_ = UkLoadKeyOrderMap(fp.get());
160+
if (keymapFile.isValid()) {
161+
list_ = UkLoadKeyOrderMap(keymapFile.fd());
162162
} else {
163163
list_.clear();
164164
}
@@ -173,14 +173,14 @@ void KeymapModel::save() {
173173
}
174174

175175
void KeymapModel::load(const QString &file) {
176-
UniqueFilePtr fp{fopen(file.toLocal8Bit().constData(), "rb")};
176+
UnixFD fd = UnixFD::own(open(file.toLocal8Bit().constData(), O_RDONLY));
177177

178-
if (!fp) {
178+
if (!fd.isValid()) {
179179
return;
180180
}
181181

182182
beginResetModel();
183-
list_ = UkLoadKeyOrderMap(fp.get());
183+
list_ = UkLoadKeyOrderMap(fd.fd());
184184
endResetModel();
185185
setNeedSave(true);
186186
}

src/unikey-im.cpp

+1-3
Original file line numberDiff line numberDiff line change
@@ -668,9 +668,7 @@ void UnikeyEngine::reloadKeymap() {
668668
auto keymapFile = StandardPath::global().open(
669669
StandardPath::Type::PkgConfig, "unikey/keymap.txt", O_RDONLY);
670670
if (keymapFile.isValid()) {
671-
UniqueFilePtr fp = fs::openFD(keymapFile, "rb");
672-
673-
UkLoadKeyMap(fp.get(), im_.sharedMem()->usrKeyMap);
671+
UkLoadKeyMap(keymapFile.fd(), im_.sharedMem()->usrKeyMap);
674672
im_.sharedMem()->usrKeyMapLoaded = true;
675673
} else {
676674
im_.sharedMem()->usrKeyMapLoaded = false;

unikey/usrkeymap.cpp

+11-7
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,12 @@
88
#include <cstdint>
99
#include <cstdio>
1010
#include <cstring>
11+
#include <fcitx-utils/fdstreambuf.h>
1112
#include <fcitx-utils/log.h>
1213
#include <fcitx-utils/misc.h>
1314
#include <fcitx-utils/stringutils.h>
15+
#include <istream>
16+
#include <string>
1417

1518
namespace {
1619

@@ -93,8 +96,8 @@ static bool parseNameValue(std::string_view line, std::string_view *name,
9396
}
9497

9598
//-----------------------------------------------------
96-
DllExport void UkLoadKeyMap(FILE *f, int keyMap[256]) {
97-
std::vector<UkKeyMapping> orderMap = UkLoadKeyOrderMap(f);
99+
DllExport void UkLoadKeyMap(int fd, int keyMap[256]) {
100+
std::vector<UkKeyMapping> orderMap = UkLoadKeyOrderMap(fd);
98101
initKeyMap(keyMap);
99102
for (const auto &item : orderMap) {
100103
keyMap[item.key] = item.action;
@@ -105,18 +108,19 @@ DllExport void UkLoadKeyMap(FILE *f, int keyMap[256]) {
105108
}
106109

107110
//------------------------------------------------------------------
108-
DllExport std::vector<UkKeyMapping> UkLoadKeyOrderMap(FILE *f) {
111+
DllExport std::vector<UkKeyMapping> UkLoadKeyOrderMap(int fd) {
109112
size_t lineCount = 0;
110113
int keyMap[256];
111114

112115
initKeyMap(keyMap);
113116

114117
std::vector<UkKeyMapping> pMap;
115-
fcitx::UniqueCPtr<char> clineBuf;
116-
size_t bufSize = 0;
117-
while (getline(clineBuf, &bufSize, f) >= 0) {
118+
fcitx::IFDStreamBuf buf(fd);
119+
std::istream in(&buf);
120+
std::string line;
121+
while (std::getline(in, line)) {
118122
lineCount++;
119-
auto text = fcitx::stringutils::trimView(clineBuf.get());
123+
auto text = fcitx::stringutils::trimView(line);
120124
if (text.empty()) {
121125
continue;
122126
}

unikey/usrkeymap.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
#include <cstdio>
1212
#include <vector>
1313

14-
DllInterface void UkLoadKeyMap(FILE *f, int keyMap[256]);
15-
DllInterface std::vector<UkKeyMapping> UkLoadKeyOrderMap(FILE *f);
14+
DllInterface void UkLoadKeyMap(int fd, int keyMap[256]);
15+
DllInterface std::vector<UkKeyMapping> UkLoadKeyOrderMap(int fd);
1616
DllInterface void UkStoreKeyOrderMap(FILE *f,
1717
const std::vector<UkKeyMapping> &pMap);
1818

0 commit comments

Comments
 (0)