FrontISTR 5.2.0
Large-scale structural analysis program with finit element method
Loading...
Searching...
No Matches
hecmw_lib_fc.c
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright (c) 2019 FrontISTR Commons
3 * This software is released under the MIT License, see LICENSE.txt
4 *****************************************************************************/
5
6#include <stdio.h>
7#include <string.h>
8#include <errno.h>
9#include "hecmw_util.h"
10
11char *HECMW_strcpy_f2c(const char *fstr, int flen) {
12 int i, len;
13 char *s;
14
15 if (fstr == NULL) return NULL;
16 if (flen <= 0) return NULL;
17
18 len = 0;
19 for (i = flen - 1; i >= 0; i--) {
20 if (fstr[i] != ' ') {
21 len = i + 1;
22 break;
23 }
24 }
25
26 if (len == 0) {
27 s = HECMW_strdup("");
28 if (s == NULL) {
29 HECMW_set_error(errno, "");
30 return NULL;
31 }
32 return s;
33 }
34
35 s = HECMW_malloc(len + 1);
36 if (s == NULL) {
37 HECMW_set_error(errno, "");
38 return NULL;
39 }
40 strncpy(s, fstr, len);
41 s[len] = '\0';
42 return s;
43}
44
45char *HECMW_strcpy_f2c_r(const char *fstr, int flen, char *buf, int bufsize) {
46 int i, len;
47
48 if (fstr == NULL) return NULL;
49 if (flen <= 0) return NULL;
50 if (buf == NULL) return NULL;
51 if (bufsize <= 0) return NULL;
52
53 len = 0;
54 for (i = flen - 1; i >= 0; i--) {
55 if (fstr[i] != ' ') {
56 len = i + 1;
57 break;
58 }
59 }
60 if (len == 0) {
61 buf[0] = '\0';
62 return buf;
63 }
64 if (len > bufsize - 1) {
65 len = bufsize - 1;
66 }
67 strncpy(buf, fstr, len);
68 buf[len] = '\0';
69 return buf;
70}
71
72int HECMW_strcpy_c2f(const char *cstr, char *fstr, int flen) {
73 int clen;
74
75 if (fstr == NULL) return 0;
76 if (flen <= 0) return 0;
77
78 if (cstr == NULL) {
79 clen = 0;
80 } else {
81 clen = strlen(cstr);
82 }
83 if (clen > flen) {
84 clen = flen;
85 }
86 memset(fstr, ' ', flen);
87 strncpy(fstr, cstr, clen);
88 return flen;
89}
int HECMW_set_error(int errorno, const char *fmt,...)
Definition: hecmw_error.c:37
#define NULL
int HECMW_strcpy_c2f(const char *cstr, char *fstr, int flen)
Definition: hecmw_lib_fc.c:72
char * HECMW_strcpy_f2c(const char *fstr, int flen)
Definition: hecmw_lib_fc.c:11
char * HECMW_strcpy_f2c_r(const char *fstr, int flen, char *buf, int bufsize)
Definition: hecmw_lib_fc.c:45
#define HECMW_strdup(s)
Definition: hecmw_malloc.h:23
#define HECMW_malloc(size)
Definition: hecmw_malloc.h:20