/*
* Copyright 2019 Haiku Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Adrien Destugues, pulkomandy@pulkomandy.tk
* Rob Gill, <rrobgill@protonmail.com>
*/
#include "HostnameView.h"
#include <stdio.h>
#include <string.h>
#include <Box.h>
#include <Button.h>
#include <Catalog.h>
#include <ControlLook.h>
#include <LayoutBuilder.h>
#include <SeparatorView.h>
#include <StringView.h>
static const int32 kMsgApply = 'aply';
#undef B_TRANSLATION_CONTEXT
#define B_TRANSLATION_CONTEXT "HostnameView"
HostnameView::HostnameView(BNetworkSettingsItem* item)
:
BView("hostname", 0),
fItem(item)
{
BStringView* titleView = new BStringView("title",
B_TRANSLATE("Hostname settings"));
titleView->SetFont(be_bold_font);
titleView->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET));
fHostname = new BTextControl(B_TRANSLATE("Hostname:"), "", NULL);
fApplyButton = new BButton(B_TRANSLATE("Apply"), new BMessage(kMsgApply));
BLayoutBuilder::Group<>(this, B_VERTICAL)
.Add(titleView)
.Add(fHostname)
.AddGlue()
.AddGroup(B_HORIZONTAL)
.AddGlue()
.Add(fApplyButton);
_LoadHostname();
}
HostnameView::~HostnameView()
{
}
status_t
HostnameView::Revert()
{
return B_OK;
}
bool
HostnameView::IsRevertable() const
{
return false;
}
void
HostnameView::AttachedToWindow()
{
fApplyButton->SetTarget(this);
}
void
HostnameView::MessageReceived(BMessage* message)
{
switch (message->what) {
case kMsgApply:
if (_SaveHostname() == B_OK)
fItem->NotifySettingsUpdated();
break;
default:
BView::MessageReceived(message);
break;
}
}
status_t
HostnameView::_LoadHostname()
{
BString fHostnameString;
char hostname[MAXHOSTNAMELEN];
if (gethostname(hostname, MAXHOSTNAMELEN) == 0) {
fHostnameString.SetTo(hostname, MAXHOSTNAMELEN);
fHostname->SetText(fHostnameString);
return B_OK;
} else
return B_ERROR;
}
status_t
HostnameView::_SaveHostname()
{
BString hostnamestring("");
size_t hostnamelen(strlen(fHostname->Text()));
if (hostnamelen == 0)
return B_ERROR;
if (hostnamelen > MAXHOSTNAMELEN) {
hostnamestring.Truncate(MAXHOSTNAMELEN);
hostnamelen = MAXHOSTNAMELEN;
}
hostnamestring << fHostname->Text();
if (sethostname(hostnamestring, hostnamelen) == 0)
return B_OK;
return B_ERROR;
}
↑ V705 It is possible that 'else' block was forgotten or commented out, thus altering the program's operation logics.