本文整理汇总了C++中copy_string函数的典型用法代码示例。如果您正苦于以下问题:C++ copy_string函数的具体用法?C++ copy_string怎么用?C++ copy_string使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了copy_string函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: de_Delete
int de_Delete() {
char * more;
char * rdn;
char * sure;
char name[LINESIZE];
int fillMostRmArg();
int noEntries;
int objectType;
int status;
noEntries = 0;
more = malloc(LINESIZE);
plp = (struct namelist *) malloc(sizeof(struct namelist));
sure = malloc(LINESIZE);
fillMostRmArg();
(void) sprintf(default_person, ""); /* Clear default value */
(void) sprintf(more, yes_string); /* Enter loop */
highNumber = 0;
while (!(strcmp(more, yes_string))) {
enterString(DELETE, person, plp);
if (!(strcmp(person, quit_String))) {
(void) sprintf(more, no_string);
if (noEntries > 0) {
freePRRs(&plp);
}
continue;
}
if (strlen(person) <= 0) {
(void) printf("%s %s %s", enter_entry_name, quit_String, to_quit);
continue;
}
(void) printf("\n");
if (noEntries > 0) {
freePRRs(&plp);
}
if (listPRRs(posdit, person, &plp) != OK) {
searchFail(person);
de_exit(-1);
}
noEntries = listlen(plp);
if (noEntries == 0) {
(void) printf(no_ent_found);
freePRRs(&plp);
} else if (noEntries == 1) {
rdn = copy_string(lastComponent(plp->name, PERSON));
status = get_objectClassPRR(plp, &objectType);
if (status != OK) {
(void) printf(no_p_rl_rm);
continue;
} else if (objectType == PERSON) {
if (listPRRs(posdit, rdn, &plp) != OK) {
searchFail(rdn);
}
} else if (objectType == ROLE) {
if (listPRRRl(posdit, rdn, &plp) != OK) {
searchFail(rdn);
}
} else if (objectType == ROOM) {
if (listPRRRm(posdit, rdn, &plp) != OK) {
searchFail(rdn);
}
}
pagerOn(NUMBER_NOT_ALLOWED);
printListPRRs(person, plp, COUNTRY, TRUE);
highNumber = 0;
de_prompt_yesno(sure_delete, sure, no_string);
if (!(strcmp(sure, yes_string))) {
/* Delete the entry */
(void) dm_Delete_entry();
freePRRs(&plp);
} else {
freePRRs(&plp);
}
} else {
/* more than 1, select from list */
pagerOn(NUMBER_ALLOWED);
printListPRRs(name, plp, COUNTRY, FALSE);
}
}
free(more);
free(rdn);
free(sure);
return OK;
}
示例2: update_ssd_ui
void update_ssd_ui(SSDataUI *ui, Quark *q)
{
if (ui && q) {
int i, nc, nr, new_nc, new_nr, ncols, nrows, nfixed_cols;
int delta_nc, delta_nr;
int *maxlengths;
char **rowlabels, **collabels;
if (ui->q != q) {
TableDeselectAllCells(ui->mw);
}
ui->q = q;
ncols = ssd_get_ncols(q);
nrows = ssd_get_nrows(q);
new_nc = ncols + EXTRA_SS_COLS;
new_nr = nrows + EXTRA_SS_ROWS;
if (ssd_is_indexed(q)) {
nfixed_cols = 1;
} else {
nfixed_cols = 0;
}
nr = TableGetNrows(ui->mw);
nc = TableGetNcols(ui->mw);
delta_nr = new_nr - nr;
delta_nc = new_nc - nc;
if (delta_nr > 0) {
TableAddRows(ui->mw, delta_nr);
} else if (delta_nr < 0) {
TableDeleteRows(ui->mw, -delta_nr);
}
rowlabels = xmalloc(new_nr*sizeof(char *));
for (i = 0; i < new_nr; i++) {
char buf[32];
sprintf(buf, "%d", i + 1);
rowlabels[i] = copy_string(NULL, buf);
}
TableSetRowLabels(ui->mw, rowlabels);
for (i = 0; i < new_nr; i++) {
xfree(rowlabels[i]);
}
xfree(rowlabels);
maxlengths = xmalloc(new_nc*SIZEOF_INT);
collabels = xmalloc(new_nc*sizeof(char *));
for (i = 0; i < new_nc; i++) {
ss_column *col = ssd_get_col(q, i);
if (col && col->format == FFORMAT_STRING) {
maxlengths[i] = STRING_CELL_WIDTH;
} else {
maxlengths[i] = 2*CELL_WIDTH;
}
if (col && !string_is_empty(col->label)) {
collabels[i] = copy_string(NULL, col->label);
} else {
unsigned int coli;
char buf[32];
coli = i;
sprintf(buf, "%c", coli%26 + 'A');
while ((coli /= 26)) {
memmove(&buf[1], buf, strlen(buf) + 1);
buf[0] = coli%26 + 'A' - 1;
}
collabels[i] = copy_string(NULL, buf);
}
}
if (delta_nc > 0) {
TableAddCols(ui->mw, delta_nc);
} else if (delta_nc < 0) {
TableDeleteCols(ui->mw, -delta_nc);
}
TableSetColMaxlengths(ui->mw, maxlengths);
TableSetColLabels(ui->mw, collabels);
TableSetFixedCols(ui->mw, nfixed_cols);
TableUpdateVisibleRowsCols(ui->mw);
xfree(maxlengths);
for (i = 0; i < new_nc; i++) {
xfree(collabels[i]);
}
xfree(collabels);
UpdateColChoice(ui->col_sel, q);
}
}
示例3: tns_parse_end
static enum proto_parse_status tns_parse_end(struct sql_proto_info *info, struct cursor *cursor)
{
SLOG(LOG_DEBUG, "Parsing tns end packet");
enum proto_parse_status status;
uint_least64_t var[6];
for (unsigned i = 0; i < 6; i++) {
if (PROTO_OK != (status = cursor_read_variable_int(cursor, var + i))) return status;
}
uint_least64_t nb_rows;
uint_least64_t error_code;
// let's use the double 0x00 to guess the position of row number and error code
if (var[0] > 0 && var[4] == 0 && var[5] == 0) {
// var[0] is unknown?
// var[1] == sequence
// var[2] == rows
// var[3] == error code
SLOG(LOG_DEBUG, "Unknown bits after ttc code");
nb_rows = var[2];
error_code = var[3];
DROP_VAR(cursor);
} else if (var[3] == 0 && var[4] == 0) {
// var[0] == sequence
// var[1] == rows
// var[2] == error code
nb_rows = var[1];
error_code = var[2];
} else {
// var[0] == rows
// var[1] == error code
nb_rows = var[0];
error_code = var[1];
}
if (info->msg_type == SQL_QUERY) {
sql_set_row_count(info, nb_rows);
SLOG(LOG_DEBUG, "Nb rows %d", info->u.query.nb_rows);
}
SLOG(LOG_DEBUG, "Error code is %zu", error_code);
DROP_VARS(cursor, 1);
DROP_FIX(cursor, 2);
DROP_VARS(cursor, 2);
DROP_FIX(cursor, 2);
DROP_VARS(cursor, 2);
DROP_FIX(cursor, 1);
DROP_VARS(cursor, 3);
if (error_code != 0) {
SLOG(LOG_DEBUG, "Parsing error message");
char *error_msg = tempstr();
unsigned error_len;
// Drop an unknown number of bytes here
while(cursor->cap_len > 2 && (cursor_peek_u8(cursor, 0) == 0 || !is_print(cursor_peek_u8(cursor, 1)))){
DROP_FIX(cursor, 1);
}
SLOG(LOG_DEBUG, "First printable char is %c", cursor_peek_u8(cursor, 1));
status = cursor_read_variable_string(cursor, error_msg, TEMPSTR_SIZE, &error_len);
if (status != PROTO_OK) return status;
if (error_len < 12) return PROTO_PARSE_ERR;
// Split "ORA-XXXX: msg"
// Part before : is the error code
// Part after is the localized message
char *colon_pos = memchr(error_msg, ':', error_len);
sql_set_request_status(info, SQL_REQUEST_ERROR);
if (colon_pos) {
// We extract the error code
unsigned error_code_size = colon_pos - error_msg;
int size_err = MIN(error_code_size, sizeof(info->error_code));
memcpy(info->error_code, error_msg, size_err);
info->error_code[size_err] = '\0';
info->set_values |= SQL_ERROR_CODE;
if (0 == strcmp("ORA-01403", info->error_code))
info->request_status = SQL_REQUEST_COMPLETE;
// We skip ':' in errror message
char const *start_message = colon_pos + 1;
// We skip spaces before errror message
while (start_message < error_len + error_msg && *start_message == ' ')
start_message++;
copy_string(info->error_message, start_message, sizeof(info->error_message));
info->set_values |= SQL_ERROR_MESSAGE;
} else {
copy_string(info->error_message, error_msg, sizeof(info->error_message));
info->set_values |= SQL_ERROR_MESSAGE;
}
}
return PROTO_OK;
}
示例4: value
/**
result_next : 'result -> object?
<doc>
Return the next row if available. A row is represented
as an object, which fields have been converted to the
corresponding Neko value (int, float or string). For
Date and DateTime you can specify your own conversion
function using [result_set_conv_date]. By default they're
returned as plain strings. Additionally, the TINYINT(1) will
be converted to either true or false if equal to 0.
</doc>
**/
static value result_next( value o ) {
result *r;
unsigned long *lengths = NULL;
MYSQL_ROW row;
val_check_kind(o,k_result);
r = RESULT(o);
row = mysql_fetch_row(r->r);
if( row == NULL )
return val_null;
{
int i;
value cur = alloc_object(NULL);
r->current = row;
for(i=0;i<r->nfields;i++)
if( row[i] != NULL ) {
value v;
switch( r->fields_convs[i] ) {
case CONV_INT:
v = alloc_best_int(atoi(row[i]));
break;
case CONV_STRING:
v = alloc_string(row[i]);
if( r->conv_string != NULL )
v = val_call1(r->conv_string,v);
break;
case CONV_BOOL:
v = alloc_bool( *row[i] != '0' );
break;
case CONV_FLOAT:
v = alloc_float(atof(row[i]));
break;
case CONV_BINARY:
if( lengths == NULL ) {
lengths = mysql_fetch_lengths(r->r);
if( lengths == NULL )
val_throw(alloc_string("mysql_fetch_lengths"));
}
v = copy_string(row[i],lengths[i]);
if( r->conv_bytes != NULL )
v = val_call1(r->conv_bytes,v);
break;
case CONV_DATE:
if( r->conv_date == NULL )
v = alloc_string(row[i]);
else {
struct tm t;
sscanf(row[i],"%4d-%2d-%2d",&t.tm_year,&t.tm_mon,&t.tm_mday);
t.tm_hour = 0;
t.tm_min = 0;
t.tm_sec = 0;
t.tm_isdst = -1;
t.tm_year -= 1900;
t.tm_mon--;
v = val_call1(r->conv_date,alloc_int32((int)mktime(&t)));
}
break;
case CONV_DATETIME:
if( r->conv_date == NULL )
v = alloc_string(row[i]);
else {
struct tm t;
sscanf(row[i],"%4d-%2d-%2d %2d:%2d:%2d",&t.tm_year,&t.tm_mon,&t.tm_mday,&t.tm_hour,&t.tm_min,&t.tm_sec);
t.tm_isdst = -1;
t.tm_year -= 1900;
t.tm_mon--;
v = val_call1(r->conv_date,alloc_int32((int)mktime(&t)));
}
break;
default:
v = val_null;
break;
}
alloc_field(cur,r->fields_ids[i],v);
}
return cur;
}
}
示例5: do_execve
int
do_execve(const char *filename, const char **argv, const char **envp) {
static_assert(EXEC_MAX_ARG_LEN >= FS_MAX_FPATH_LEN);
struct mm_struct *mm = current->mm;
char local_name[PROC_NAME_LEN + 1];
memset(local_name, 0, sizeof(local_name));
char *kargv[EXEC_MAX_ARG_NUM], *kenvp[EXEC_MAX_ENV_NUM];
const char *path;
int ret = -E_INVAL;
lock_mm(mm);
#if 0
if (name == NULL) {
snprintf(local_name, sizeof(local_name), "<null> %d", current->pid);
}
else {
if (!copy_string(mm, local_name, name, sizeof(local_name))) {
unlock_mm(mm);
return ret;
}
}
#endif
snprintf(local_name, sizeof(local_name), "<null> %d", current->pid);
int argc = 0, envc = 0;
if ((ret = copy_kargv(mm, kargv, argv, EXEC_MAX_ARG_NUM, &argc)) != 0) {
unlock_mm(mm);
return ret;
}
if ((ret = copy_kargv(mm, kenvp, envp, EXEC_MAX_ENV_NUM, &envc)) != 0) {
unlock_mm(mm);
put_kargv(argc, kargv);
return ret;
}
#if 0
int i;
kprintf("## fn %s\n", filename);
kprintf("## argc %d\n", argc);
for(i=0;i<argc;i++)
kprintf("## %08x %s\n", kargv[i], kargv[i]);
kprintf("## envc %d\n", envc);
for(i=0;i<envc;i++)
kprintf("## %08x %s\n", kenvp[i], kenvp[i]);
#endif
//path = argv[0];
//copy_from_user (mm, &path, argv, sizeof (char*), 0);
path = filename;
unlock_mm(mm);
/* linux never do this */
//fs_closeall(current->fs_struct);
/* sysfile_open will check the first argument path, thus we have to use a user-space pointer, and argv[0] may be incorrect */
int fd;
if ((ret = fd = sysfile_open(path, O_RDONLY)) < 0) {
goto execve_exit;
}
if (mm != NULL) {
mm->lapic = -1;
mp_set_mm_pagetable(NULL);
if (mm_count_dec(mm) == 0) {
exit_mmap(mm);
put_pgdir(mm);
bool intr_flag;
local_intr_save(intr_flag);
{
list_del(&(mm->proc_mm_link));
}
local_intr_restore(intr_flag);
mm_destroy(mm);
}
current->mm = NULL;
}
put_sem_queue(current);
ret = -E_NO_MEM;
/* init signal */
put_sighand(current);
if ((current->signal_info.sighand = sighand_create()) == NULL) {
goto execve_exit;
}
sighand_count_inc(current->signal_info.sighand);
put_signal(current);
if ((current->signal_info.signal = signal_create()) == NULL) {
goto execve_exit;
}
signal_count_inc(current->signal_info.signal);
if ((current->sem_queue = sem_queue_create()) == NULL) {
goto execve_exit;
}
sem_queue_count_inc(current->sem_queue);
//.........这里部分代码省略.........
示例6: unix_error_message
CAMLprim value unix_error_message(value err)
{
int errnum;
errnum = Is_block(err) ? Int_val(Field(err, 0)) : error_table[Int_val(err)];
return copy_string(strerror(errnum));
}
示例7: llvm_datalayout_as_string
/* DataLayout.t -> string */
CAMLprim value llvm_datalayout_as_string(value TD) {
char *StringRep = LLVMCopyStringRepOfTargetData(DataLayout_val(TD));
value Copy = copy_string(StringRep);
LLVMDisposeMessage(StringRep);
return Copy;
}
示例8: unix_gethostname
CAMLprim value unix_gethostname(value unit)
{
struct utsname un;
uname(&un);
return copy_string(un.nodename);
}
示例9: parse_multipart_data
/**
parse_multipart_data : onpart:function:2 -> ondata:function:3 -> void
<doc>
Incrementally parse the multipart data. call [onpart(name,filename)] for each part
found and [ondata(buf,pos,len)] when some data is available
</doc>
**/
static value parse_multipart_data( value onpart, value ondata ) {
value buf;
int len = 0;
mcontext *c = CONTEXT();
const char *ctype = ap_table_get(c->r->headers_in,"Content-Type");
value boundstr;
val_check_function(onpart,2);
val_check_function(ondata,3);
buf = alloc_empty_string(BUFSIZE);
if( !ctype || strstr(ctype,"multipart/form-data") == NULL )
return val_null;
// extract boundary value
{
const char *boundary, *bend;
if( (boundary = strstr(ctype,"boundary=")) == NULL )
neko_error();
boundary += 9;
PARSE_HEADER(boundary,bend);
len = (int)(bend - boundary);
boundstr = alloc_empty_string(len+2);
if( val_strlen(boundstr) > BUFSIZE / 2 )
neko_error();
val_string(boundstr)[0] = '-';
val_string(boundstr)[1] = '-';
memcpy(val_string(boundstr)+2,boundary,len);
}
len = 0;
if( !ap_should_client_block(c->r) )
neko_error();
while( true ) {
char *name, *end_name, *filename, *end_file_name, *data;
int pos;
// refill buffer
// we assume here that the the whole multipart header can fit in the buffer
fill_buffer(c,buf,&len);
// is boundary at the beginning of buffer ?
if( len < val_strlen(boundstr) || memcmp(val_string(buf),val_string(boundstr),val_strlen(boundstr)) != 0 )
return discard_body(c);
name = memfind(val_string(buf),len,"Content-Disposition:");
if( name == NULL )
break;
name = memfind(name,len - (int)(name - val_string(buf)),"name=");
if( name == NULL )
return discard_body(c);
name += 5;
PARSE_HEADER(name,end_name);
data = memfind(end_name,len - (int)(end_name - val_string(buf)),"\r\n\r\n");
if( data == NULL )
return discard_body(c);
filename = memfind(name,(int)(data - name),"filename=");
if( filename != NULL ) {
filename += 9;
PARSE_HEADER(filename,end_file_name);
}
data += 4;
pos = (int)(data - val_string(buf));
// send part name
val_call2(onpart,copy_string(name,(int)(end_name - name)),filename?copy_string(filename,(int)(end_file_name - filename)):val_null);
// read data
while( true ) {
const char *boundary;
// recall buffer
memmove(val_string(buf),val_string(buf)+pos,len - pos);
len -= pos;
pos = 0;
fill_buffer(c,buf,&len);
// lookup bounds
boundary = memfind(val_string(buf),len,val_string(boundstr));
if( boundary == NULL ) {
if( len == 0 )
return discard_body(c);
// send as much buffer as possible to client
if( len < BUFSIZE )
pos = len;
else
pos = len - val_strlen(boundstr) + 1;
val_call3(ondata,buf,alloc_int(0),alloc_int(pos));
} else {
// send remaining data
pos = (int)(boundary - val_string(buf));
val_call3(ondata,buf,alloc_int(0),alloc_int(pos-2));
// recall
memmove(val_string(buf),val_string(buf)+pos,len - pos);
len -= pos;
break;
}
}
}
return val_null;
}
示例10: string
static void string()
{
emit_constant(OBJ_VAL(copy_string(parser.previous.start + 1, parser.previous.length - 2)));
}
示例11: SetTo
bool
nsTextFragment::Append(const char16_t* aBuffer, uint32_t aLength, bool aUpdateBidi)
{
// This is a common case because some callsites create a textnode
// with a value by creating the node and then calling AppendData.
if (mState.mLength == 0) {
return SetTo(aBuffer, aLength, aUpdateBidi);
}
// Should we optimize for aData.Length() == 0?
if (mState.mIs2b) {
// Already a 2-byte string so the result will be too
char16_t* buff = (char16_t*)realloc(m2b, (mState.mLength + aLength) * sizeof(char16_t));
if (!buff) {
return false;
}
memcpy(buff + mState.mLength, aBuffer, aLength * sizeof(char16_t));
mState.mLength += aLength;
m2b = buff;
if (aUpdateBidi) {
UpdateBidiFlag(aBuffer, aLength);
}
return true;
}
// Current string is a 1-byte string, check if the new data fits in one byte too.
int32_t first16bit = FirstNon8Bit(aBuffer, aBuffer + aLength);
if (first16bit != -1) { // aBuffer contains no non-8bit character
// The old data was 1-byte, but the new is not so we have to expand it
// all to 2-byte
char16_t* buff =
(char16_t*)malloc((mState.mLength + aLength) * sizeof(char16_t));
if (!buff) {
return false;
}
// Copy data into buff
LossyConvertEncoding8to16 converter(buff);
copy_string(m1b, m1b+mState.mLength, converter);
memcpy(buff + mState.mLength, aBuffer, aLength * sizeof(char16_t));
mState.mLength += aLength;
mState.mIs2b = true;
if (mState.mInHeap) {
free(m2b);
}
m2b = buff;
mState.mInHeap = true;
if (aUpdateBidi) {
UpdateBidiFlag(aBuffer + first16bit, aLength - first16bit);
}
return true;
}
// The new and the old data is all 1-byte
char* buff;
if (mState.mInHeap) {
buff = (char*)realloc(const_cast<char*>(m1b),
(mState.mLength + aLength) * sizeof(char));
if (!buff) {
return false;
}
}
else {
buff = (char*)malloc((mState.mLength + aLength) * sizeof(char));
if (!buff) {
return false;
}
memcpy(buff, m1b, mState.mLength);
mState.mInHeap = true;
}
// Copy aBuffer into buff.
LossyConvertEncoding16to8 converter(buff + mState.mLength);
copy_string(aBuffer, aBuffer + aLength, converter);
m1b = buff;
mState.mLength += aLength;
return true;
}
示例12: parse_args
/*
* parse_args()
*
* In: argc - number of command-line arguments.
* argv - string array containing command-line arguments.
*
* Returns: an index into argv where we stopped parsing arguments.
*
* Abstract: Parses command-line arguments. In some cases, it will
* set the appropriate global variables and return. Otherwise,
* it performs the appropriate action and exits.
*
* Assumptions: Currently, we check to make sure that there are no arguments
* other than the defined options, so the return value is
* pretty useless and should be ignored.
*/
int parse_args(int argc, char **argv)
{
int c;
int gotdomain = 0;
progname = strrchr(argv[0], '/');
if (!progname) progname = argv[0];
while(1) {
#if defined(__GNU_LIBRARY__)
c = getopt_long(argc, argv, short_options, long_options, 0);
#else
c = getopt(argc, argv, short_options);
#endif
if (c == -1) break;
switch(c) {
case 'a': {
if (!inet_aton(optarg, &recv_addr.sin_addr)) {
log_msg(LOG_ERR, "%s: Bad ip address \"%s\"\n",
progname, optarg);
exit(-1);
}
break;
}
case 'c': {
#ifdef ENABLE_CACHE
copy_string(cache_param, optarg, sizeof(cache_param));
#endif
break;
}
case 'd': {
opt_debug++;
break;
}
case 'h': {
give_help();
exit(0);
break;
}
case 'k': {
if (!kill_current()) {
printf("No %s daemon found. Exiting.\n", progname);
}
exit(0);
break;
}
case 'l': {
gotterminal = 0;
break;
}
case 'm': {
#ifdef ENABLE_CACHE
copy_string(master_param, optarg, sizeof(master_param));
#endif
break;
}
case 's': {
char *sep = strchr(optarg, (int)':');
if (serv_cnt >= MAX_SERV) {
log_msg(LOG_ERR, "%s: Max. %d DNS servers allowed\n",
progname, MAX_SERV);
exit(-1);
}
if (gotdomain == -1) {
log_msg(LOG_ERR, "%s: When giving server arguments with "
"domain names,\nonly the last one is permitted to "
"not have a domain name.\n", progname);
exit(-1);
}
if (sep) {
dns_srv[serv_cnt].domain = make_cname(sep + 1);
if (gotdomain == -1) {
log_msg(LOG_ERR, "%s: Server arguments with domain "
"names must appear before\n"
"those without domain names.\n", progname);
exit(-1);
}
gotdomain = 1;
*sep = 0;
}
else if (gotdomain != 0) {
gotdomain = -1;
}
if (!inet_aton(optarg, &dns_srv[serv_cnt].addr.sin_addr)) {
//.........这里部分代码省略.........
示例13: ml_string_of_ptr
PREFIX value ml_string_of_ptr(value v_ptr)
{
const char* ptr = (const char*) v_ptr;
if(ptr == NULL) caml_failwith("string_of_ptr");
return copy_string(ptr);
}
示例14: sourceAddr
Token* Scanner::read_name(fint c) {
Token::TokenType t;
fint l = line;
fint col = column - 1;
const char* ss = sourceAddr() - 1;
fint len;
if (c == ':') {
t = Token::ARG;
len = 0;
} else {
t = c == '_' ? Token::PRIMNAME : Token::NAME;
len = 1;
buffer[0] = char(c);
}
while (c = get_char(), is_id_char(c)) {
buffer[len++] = char(c);
}
if (c == ':' && (t == Token::NAME || t == Token::PRIMNAME)) {
buffer[len++] = char(c);
if (is_upper((fint)*buffer)) t = Token::CAPKEYWORD;
else
t = c == '_' ? Token::PRIMKEYWORD : Token::KEYWORD;
}
else {
push_char(c);
}
buffer[len] = '\0';
if (t == Token::ARG && len == 0) {
t = as_TokenType(':');
} else if (t == Token::NAME || t == Token::PRIMNAME) {
c = get_char();
if (c == '.') {
c = get_char();
push_char(c);
if (is_id_alpha(c) || is_punct(c)) {
t = Token::DELEGATE;
} else {
push_char('.');
}
} else {
push_char(c);
}
}
if (strcmp(buffer, "self") == 0) {
if (t == Token::NAME) {
t = Token::SELF_TOKEN;
} else {
return TokenizingError(
"using \"self\" as a parent name for a directed resend");
}
} else if (strcmp(buffer, "resend") == 0) {
if (t == Token::DELEGATE) {
t = Token::RESEND_TOKEN;
} else {
return TokenizingError("not using \"resend\" in a resend");
}
}
String* s;
if (t == Token::NAME || t == Token::PRIMNAME || t == Token::ARG || t == Token::DELEGATE ||
t == Token::KEYWORD || t == Token::PRIMKEYWORD || t == Token::CAPKEYWORD) {
s = new String(copy_string(buffer));
} else {
s = NULL;
}
return new Token(t, s, l, col, ss);
}
示例15: set_editor
void set_editor(GraceApp *gapp, const char *cmd)
{
gapp->rt->gapp_editor = copy_string(gapp->rt->gapp_editor, cmd);
}