Fixed the fgetln workaround
This commit is contained in:
parent
1ddde16895
commit
891831be3a
|
@ -8,6 +8,19 @@
|
||||||
* keysyms.
|
* keysyms.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
#if defined(__FreeBSD__)
|
||||||
|
#include <sys/param.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* For systems without getline, fall back to fgetln */
|
||||||
|
#if defined(__APPLE__) || (defined(__FreeBSD__) && __FreeBSD_version < 800000)
|
||||||
|
#define USE_FGETLN
|
||||||
|
#elif defined(__FreeBSD__)
|
||||||
|
/* Defining this macro before including stdio.h is necessary in order to have
|
||||||
|
* a prototype for getline in FreeBSD. */
|
||||||
|
#define _WITH_GETLINE
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <ev.h>
|
#include <ev.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
@ -283,7 +296,7 @@ static void finish() {
|
||||||
|
|
||||||
char *line = NULL;
|
char *line = NULL;
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
#if !defined(__APPLE__)
|
#ifndef USE_FGETLN
|
||||||
ssize_t read;
|
ssize_t read;
|
||||||
#endif
|
#endif
|
||||||
bool head_of_file = true;
|
bool head_of_file = true;
|
||||||
|
@ -296,10 +309,16 @@ static void finish() {
|
||||||
fputs("# this file and re-run i3-config-wizard(1).\n", ks_config);
|
fputs("# this file and re-run i3-config-wizard(1).\n", ks_config);
|
||||||
fputs("#\n", ks_config);
|
fputs("#\n", ks_config);
|
||||||
|
|
||||||
#if defined(__APPLE__)
|
#ifdef USE_FGETLN
|
||||||
while ((line = fgetln(kc_config, &len)) != NULL) {
|
char *buf = NULL;
|
||||||
|
while ((buf = fgetln(kc_config, &len)) != NULL) {
|
||||||
|
/* fgetln does not return null-terminated strings */
|
||||||
|
FREE(line);
|
||||||
|
sasprintf(&line, "%.*s", len, buf);
|
||||||
#else
|
#else
|
||||||
while ((read = getline(&line, &len, kc_config)) != -1) {
|
size_t linecap = 0;
|
||||||
|
while ((read = getline(&line, &linecap, kc_config)) != -1) {
|
||||||
|
len = strlen(line);
|
||||||
#endif
|
#endif
|
||||||
/* skip the warning block at the beginning of the input file */
|
/* skip the warning block at the beginning of the input file */
|
||||||
if (head_of_file &&
|
if (head_of_file &&
|
||||||
|
@ -336,7 +355,10 @@ static void finish() {
|
||||||
fflush(ks_config);
|
fflush(ks_config);
|
||||||
fsync(fileno(ks_config));
|
fsync(fileno(ks_config));
|
||||||
|
|
||||||
|
#ifndef USE_FGETLN
|
||||||
free(line);
|
free(line);
|
||||||
|
#endif
|
||||||
|
|
||||||
fclose(kc_config);
|
fclose(kc_config);
|
||||||
fclose(ks_config);
|
fclose(ks_config);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue