ff4ff35918
Red Bear OS is a full fork. All sources must be available from git clone with zero network access. Removed gitignore rules that excluded fetched source trees under recipes/*/source/, local/recipes/kde/*/source/, local/recipes/qt/*/source/, and vendor source trees. Build artifacts (target/, build/, source.tar, *.o, *.so) remain excluded. 127291 files added — kernel, relibc, base, bootloader, pkgar, all KDE/Qt frameworks, mesa, wayland, DRM drivers, and every other recipe source.
178 lines
3.9 KiB
C++
178 lines
3.9 KiB
C++
/* Copyright (C) 2021-2024 Free Software Foundation, Inc.
|
|
Contributed by Oracle.
|
|
|
|
This file is part of GNU Binutils.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3, or (at your option)
|
|
any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, 51 Franklin Street - Fifth Floor, Boston,
|
|
MA 02110-1301, USA. */
|
|
|
|
#include "config.h"
|
|
#include <time.h>
|
|
|
|
#include "DbeSession.h"
|
|
#include "Expression.h"
|
|
#include "StringBuilder.h"
|
|
#include "util.h"
|
|
#include "UserLabel.h"
|
|
#include "debug.h"
|
|
|
|
int UserLabel::last_id = 0;
|
|
|
|
UserLabel::UserLabel (char *_name)
|
|
{
|
|
name = dbe_strdup (_name);
|
|
comment = str_expr = all_times = hostname = NULL;
|
|
start_f = stop_f = false;
|
|
expr = NULL;
|
|
start_tv.tv_sec = 0;
|
|
start_tv.tv_usec = 0;
|
|
atime = timeStart = timeStop = start_sec = start_hrtime = 0;
|
|
relative = REL_TIME;
|
|
id = ++last_id;
|
|
}
|
|
|
|
UserLabel::~UserLabel ()
|
|
{
|
|
free (name);
|
|
free (comment);
|
|
free (all_times);
|
|
free (hostname);
|
|
free (str_expr);
|
|
delete expr;
|
|
}
|
|
|
|
void
|
|
UserLabel::gen_expr ()
|
|
{
|
|
if (!start_f && !stop_f)
|
|
return;
|
|
StringBuilder sb;
|
|
sb.append ('(');
|
|
if (str_expr)
|
|
{
|
|
sb.append (str_expr);
|
|
sb.append (NTXT (" || ("));
|
|
}
|
|
if (start_f)
|
|
{
|
|
sb.append (NTXT ("TSTAMP"));
|
|
sb.append (NTXT (">="));
|
|
sb.append (timeStart);
|
|
if (stop_f)
|
|
{
|
|
sb.append (NTXT (" && "));
|
|
}
|
|
}
|
|
if (stop_f)
|
|
{
|
|
sb.append (NTXT ("TSTAMP"));
|
|
sb.append ('<');
|
|
sb.append (timeStop);
|
|
}
|
|
sb.append (')');
|
|
if (str_expr)
|
|
{
|
|
sb.append (')');
|
|
delete str_expr;
|
|
}
|
|
str_expr = sb.toString ();
|
|
start_f = stop_f = false;
|
|
}
|
|
|
|
void
|
|
UserLabel::register_user_label (int groupId)
|
|
{
|
|
gen_expr ();
|
|
if (str_expr)
|
|
{
|
|
char *old_str = str_expr;
|
|
str_expr = dbe_sprintf (NTXT ("(EXPGRID==%d && %s)"), groupId, old_str);
|
|
delete old_str;
|
|
UserLabel *ulbl = dbeSession->findUserLabel (name);
|
|
if (ulbl)
|
|
{
|
|
old_str = ulbl->str_expr;
|
|
ulbl->str_expr = dbe_sprintf (NTXT ("(%s || %s)"), old_str, str_expr);
|
|
delete old_str;
|
|
if (comment)
|
|
{
|
|
if (ulbl->comment)
|
|
{
|
|
old_str = ulbl->comment;
|
|
ulbl->comment = dbe_sprintf (NTXT ("%s; %s"), old_str, comment);
|
|
delete old_str;
|
|
}
|
|
else
|
|
ulbl->comment = dbe_strdup (comment);
|
|
}
|
|
delete ulbl->expr;
|
|
ulbl->expr = dbeSession->ql_parse (ulbl->str_expr);
|
|
}
|
|
else
|
|
{
|
|
expr = dbeSession->ql_parse (str_expr);
|
|
dbeSession->append (this);
|
|
}
|
|
}
|
|
}
|
|
|
|
char *
|
|
UserLabel::dump ()
|
|
{
|
|
StringBuilder sb;
|
|
sb.append (name);
|
|
if (str_expr)
|
|
{
|
|
sb.append (NTXT (" str_expr='"));
|
|
sb.append (str_expr);
|
|
sb.append ('\'');
|
|
}
|
|
if (all_times)
|
|
{
|
|
sb.append (NTXT (" atime="));
|
|
sb.append ((unsigned int) (atime / NANOSEC));
|
|
sb.append ('.');
|
|
char buf[128];
|
|
snprintf (buf, sizeof (buf), NTXT ("%09llu"), (unsigned long long) (atime % NANOSEC));
|
|
sb.append (buf);
|
|
sb.append (NTXT (" all_times='"));
|
|
sb.append (all_times);
|
|
sb.append ('\'');
|
|
}
|
|
if (comment)
|
|
{
|
|
sb.append (NTXT (" comment='"));
|
|
sb.append (comment);
|
|
sb.append ('\'');
|
|
}
|
|
return sb.toString ();
|
|
}
|
|
|
|
void
|
|
UserLabel::dump (const char *msg, Vector<UserLabel*> *labels)
|
|
{
|
|
if (!DUMP_USER_LABELS)
|
|
return;
|
|
if (msg)
|
|
fprintf (stderr, NTXT ("%s\n"), msg);
|
|
for (int i = 0, sz = labels ? labels->size () : 0; i < sz; i++)
|
|
{
|
|
UserLabel *lbl = labels->fetch (i);
|
|
char *s = lbl->dump ();
|
|
fprintf (stderr, NTXT ("%2d %s\n"), i, s);
|
|
delete s;
|
|
}
|
|
}
|